请考虑以下设置:
模型:
public class Product { [ReadOnly(true)] public int ProductID { get; set; } public string Name { get; set; } }
视图:
<%@ 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>
控制器:
public class HomeController : Controller { public ActionResult Index() { return View(new Product { ProductID = 1,Name = "Banana" }); } }
结果如下:
我期望通过ReadOnly(true)属性不能编辑ProductID属性.这支持吗?如果没有,有没有办法提示ASP.NET MVC我的模型的某些属性是只读的?我不想通过[ScaffoldColumn(false)]隐藏ProductID.
解决方法
ReadOnly和required属性将由元数据提供程序使用,但不会被使用.如果你想用EditorForModel去掉输入,你需要一个自定义模板,或者[ScaffoldColumn(false)].
对于自定义模板〜/ Views / Home / EditorTemplates / Product.ascx:
<%@ Control Language="C#" Inherits="ViewUserControl<Product>" %> <%: Html.LabelFor(x => x.ProductID) %> <%: Html.TextBoxFor(x => x.ProductID,new { @readonly = "readonly" }) %> <%: Html.LabelFor(x => x.Name) %> <%: Html.TextBoxFor(x => x.Name) %>
另请注意,默认模型绑定程序不会使用[ReadOnly(false)]将值复制到属性中.此属性不会影响默认模板呈现的UI.