我有一个我定义为的文本框
<%= Html.TextBox("Username", Model.Form.Username,
new { @class = "textbox", @disabled = "disabled" })%>
Run Code Online (Sandbox Code Playgroud)
在我的行动中
[AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
public ActionResult EditLogin(LoginForm post) {
...
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
post.Username将为空,所有其他属性绑定正确,但如果我将@disable ="disabled更改为@ readonly ="readonly"用户名绑定正确且一切正常.
看起来模型绑定忽略禁用字段中的值.他们是这样的吗?我仍然需要字段的值来绑定到模型.我可以使用readonly但更喜欢使用disabled,因此用户在视觉上可以看出他们无法编辑字段的值.
如何创建一个HTML Helper来扩展TextBoxFor()以添加CSS样式?
@Html.TextBoxFor(model => model.FirstName, new { @class = "txt" })
Run Code Online (Sandbox Code Playgroud) 请考虑以下设置:
模型:
public class Product
{
[ReadOnly(true)]
public int ProductID
{
get;
set;
}
public string Name
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<MvcApplication4.Models.Product>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Home Page
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%= Html.EditorForModel() %>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new Product
{
ProductID = 1,
Name = "Banana"
});
}
}
Run Code Online (Sandbox Code Playgroud)
结果如下:

我期待该ProductID属性不会通过该ReadOnly(true)属性进行编辑.这支持吗?如果没有,有没有办法提示ASP.NET MVC我的模型的某些属性是只读的?我不想隐藏ProductID通过[ScaffoldColumn(false)].