首页 > 解决方案 > @Html.EditorFor(model => model.Username) 不显示文本框

问题描述

我是 ASP.NET MVC 的新手并正在学习它。我正在使用 Asp.Net MVC 实体框架。在我称为“注册”的视图中,我正在编写以下代码

<div id="Reg_div"> 
     @using (Html.BeginForm("RegisterUser", "Register", FormMethod.Post))
    {
    <table>

           <tr>

            <td>
                @Html.LabelFor(model => model.Username)
            </td>

            <td>
                @Html.EditorFor(model => model.Username)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(model => model.Password)
            </td>
            <td>
                @Html.EditorFor(model => model.Password)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(model => model.FName)
            </td>
            <td>
                @Html.EditorFor(model => model.FName)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(model => model.LName)
            </td>
            <td>
                @Html.EditorFor(model => model.LName)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(model => model.Address)
            </td>
            <td>
                @Html.EditorFor(model => model.Address)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(model => model.Email)
            </td>
            <td>
                @Html.EditorFor(model => model.Email)
            </td>
        </tr>

        <tr>

            <td>
                <input type="submit" name="name" value="Register" />
            </td>

        </tr>



    </table>
    }
</div>

在此处输入图像描述

这是 RegistrationModel.cs

namespace PTMatrix.Models
{
using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;

public partial class RegistrationModel : DbContext
{
    public RegistrationModel()
        : base("name=RegistrationModel")
    {
    }

    public virtual DbSet<User_reg> User_reg { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User_reg>()
            .Property(e => e.LName)
            .IsUnicode(false);

        modelBuilder.Entity<User_reg>()
            .Property(e => e.FName)
            .IsUnicode(false);

        modelBuilder.Entity<User_reg>()
            .Property(e => e.Password)
            .IsUnicode(false);

        modelBuilder.Entity<User_reg>()
            .Property(e => e.Address)
            .IsUnicode(false);

        modelBuilder.Entity<User_reg>()
            .Property(e => e.Email)
            .IsUnicode(false);

        modelBuilder.Entity<User_reg>()
            .Property(e => e.Phone)
            .IsUnicode(false);
    }
}

}

User_reg.cs

namespace PTMatrix.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;

public partial class User_reg
{
    [Key]
    public int Uid { get; set; }

    [StringLength(50)]
    public string LName { get; set; }

    [StringLength(50)]
    public string FName { get; set; }

    [MaxLength(50)]
    public byte[] Username { get; set; }

    [StringLength(50)]
    public string Password { get; set; }

    [StringLength(50)]
    public string Address { get; set; }

    [StringLength(50)]
    public string Email { get; set; }

    [StringLength(50)]
    public string Phone { get; set; }
}

}

我收到一个非常奇怪的错误,其中没有显示用户名的文本框,但显示了所有其他文本框。我错过了什么吗?请帮忙。

标签: asp.net-mvcentity-framework

解决方案


从你User_reg定义你的Usernameas byte[],这就是为什么EditorFor不显示文本框,因为默认情况下,它不知道要显示什么byte[]

你有两个选择:

  1. 更改byte[]为类似string(奇怪的是用户名是 byte[] 无论如何)
  2. 如果byte[]是你想要的,那么为字节创建一个 EditorTemplate (在网上有很多关于这个的信息,比如这个)或者使用类似TextboxForwhich explicit 指定你想要输出的东西

推荐阅读