C# ASP.NET MVC4表,其中一列是主键

C# ASP.NET MVC4表,其中一列是主键,c#,asp.net-mvc,asp.net-mvc-4,primary-key,C#,Asp.net Mvc,Asp.net Mvc 4,Primary Key,我正在使用: ASP.NET MVC4 Visual Studio 2012 Linq2SQL SQL Server 2008 R2 我有一个桌面角色: (一列名为RoleName,数据类型为varchar(50),是主键) 当我创建一个具有as模型类角色(额外的“s”是由多元化造成的,没有问题)和脚手架模板编辑的强类型视图时,结果是我只得到一个隐藏字段,没有编辑/输入字段,如下所示: <fieldset> <legend>Role</legend&g

我正在使用:

  • ASP.NET MVC4
  • Visual Studio 2012
  • Linq2SQL
  • SQL Server 2008 R2
我有一个桌面角色:

(一列名为RoleName,数据类型为varchar(50),是主键)

当我创建一个具有as模型类角色(额外的“s”是由多元化造成的,没有问题)和脚手架模板编辑的强类型视图时,结果是我只得到一个隐藏字段,没有编辑/输入字段,如下所示:

<fieldset>
    <legend>Role</legend>

    @Html.HiddenFor(model => model.RoleName)

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>

角色
@Html.HiddenFor(model=>model.RoleName)

这可能是因为MVC用于标识数据库记录的唯一列是主键


我希望能够编辑每个角色的角色名。如何为具有一列作为主键的表创建编辑页?

只需调整搭建的HTML标记以满足您的需要。MVC之所以将其隐藏是因为它是主键,您是对的。解开它

<fieldset>
    <legend>Role</legend>

    @Html.TextBoxFor(model => model.RoleName)

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>

角色
@Html.TextBoxFor(model=>model.RoleName)

然而,这可能只是主观的,我认为拥有一个基于int的主键将大大有助于实现以下目标:

  • 如果意外编辑或添加与现有角色名匹配的角色名,则不会引发DB异常
  • 将用户附加到角色时,在数据库中节省空间。与为每个用户/角色复制一个varchar(50)不同,您将只复制一个int。(UserId/RoleId)
  • 比varchar更快/更好地索引整数
  • 谢谢,为了更好地与MVC兼容,我准备使用(添加的)基于int的主键。