我有一个Html.TextBox(),我需要在某些条件下禁用它.使用TextArea,它是这样的:
<%=primaryLang ? Html.TextArea("e.location", new { rows = 2, cols = 60 }) : Html.TextArea("e.location", new { rows = 2, cols = 60, disabled = "true" })%>
Run Code Online (Sandbox Code Playgroud)
但是使用TextBox是不可能的:
<%=primaryLang ?
Html.TextBox("e.startDate") :
Html.TextBox("e.startDate", new { disabled = "true"})%>
Run Code Online (Sandbox Code Playgroud)
它将在值中发出{disabled = true}.这是因为唯一允许您传递HtmlAttributes的函数也需要传递模型.此视图是强类型的,并且模型会自动填充.
如果我这样传递:
Html.TextBox("e.startDate", Model.e.startDate, new { disabled = "true"})
Run Code Online (Sandbox Code Playgroud)
或者像这样:
Html.TextBox("e.startDate", null, new { disabled = "true"})
Run Code Online (Sandbox Code Playgroud)
GET版本可以使用,但POST版本将发出NullReferenceException.以上两者似乎都具有完全相同的效果.两者都将在GET上呈现模型中的正确数据.
如果我离开它就像这样:
Html.TextBox("e.startDate")
Run Code Online (Sandbox Code Playgroud)
POST和GET都能正常工作......
为什么?有什么办法吗?
谢谢!:)
感谢下面的答案,我解决了这个问题:
<%=primaryLang ?
Html.TextBox("e.startDate") :
Html.Hidden("e.startDate") + Html.TextBox("e.startDate", null, new { disabled = "true"})%>
Run Code Online (Sandbox Code Playgroud)
Dav*_*enn 18
禁用的HTML元素不会回发到服务器.这就是当您设法禁用元素时获得NullReferenceException的原因.
我不确定你想要实现什么,但是如果你不允许e.startDate可编辑,那么你不应该将它发回来,因为你应该已经知道它的价值.所以你有两个选择.
警告:仅仅因为该元素被禁用,并不意味着某人无法编辑该值并将其发回.这只是一个建议.这取决于浏览器如何显示字段.如果您的POST代码确实接受了e.startDate值,那么任何有访问权限的人都可以使用开发工具编辑该字段.
Jan*_*m B 12
在POST上,"Model"或"e"属性可能为null.
你可以试试这个:
<%if (Model != null && Model.e != null) { %>
<%=Html.TextBox("e.StartDate", Model.e.StartDate, primaryLang ? null : new { disabled = "disabled" })%>
<%}%>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57697 次 |
| 最近记录: |