我以为他们可以,但是因为我不把钱放在我的嘴里(可以这么说)设置readonly属性实际上似乎没有做任何事情.
我宁愿不使用Disabled,因为我希望检查复选框与表单的其余部分一起提交,我只是不希望客户端在某些情况下能够更改它们.
我有一个ASP.Net MVC 3 Web应用程序,我正在使用HtmlHelper类向视图页面添加一个复选框,就像这样......
@Html.CheckBox("CheckBox1", true, new { @class = "Class1" })
Run Code Online (Sandbox Code Playgroud)
我想要做的是根据视图状态属性有条件地添加disabled属性.基本上以下是理想的......
@Html.CheckBox("CheckBox1", true, new { @class = "Class1", @disabled = Model.ReadOnly })
Run Code Online (Sandbox Code Playgroud)
遗憾的是,由于disabled属性的性质,这将不起作用,因为分配给disabled属性的任何值(甚至"false")都将转换为true.
我已经想到了一些解决这个问题的解决方案,所以问题不是我怎么能这样做.但是,有一种简单的方法,如上面所需的方法?或者我是否必须诉诸以下其中一项?
我知道我能做什么......
创建一个if/else语句并写入不同的Html.CheckBox行(对于可读性而言不是很好 - 并且可能会抛出标记警告 - 不确定)
跳过HtmlHelper类并手写标记以允许更好的条件属性(保持代码更短,但增加了不一致性)
创建一个自定义帮助程序,它采用"禁用"参数(最干净的解决方案,但需要不需要的额外方法 - 可能是目前为止最好的选择)
我有一个表单,我必须将表单值发布到我的动作类.在这种形式中,我有一个需要只读的复选框.我尝试过设置,disabled="true"但在发布到动作类时不起作用.
所以请指教?
希望对你来说一个简单的问题asp.net mvc gurus:
我有一个复选框,像这样创建:
<%=Html.CheckBox("MyCheckBox", true, new { disabled = "disabled"})%>
Run Code Online (Sandbox Code Playgroud)
在我的行动中,我正在检查这样的值:
bool isChecked = form["MyCheckBox"].Contains("true");
Run Code Online (Sandbox Code Playgroud)
我希望这会返回true,因为它已被检查.但是,创建的隐藏元素具有false值:
<input checked="checked" disabled="disabled" id="MyCheckBox" name="MyCheckBox" type="checkbox" value="true" />
<input name="MyCheckBox" type="hidden" value="false" />
Run Code Online (Sandbox Code Playgroud)
首先,有没有办法让HtmlHelper表现得像我预期的那样?或者是手动构建输入/创建自己的帮助方法的唯一方法?(不是说这是一个大问题......)
其次,任何人都可以解释为什么复选框的行为方式如此?假设一个勾选的禁用复选框应该== true,我是不正确的?禁用状态在语义上是否意味着错误?
CheckBoxFor(t => t.boolValue,new {disabled ="disabled"})方法在禁用模式下呈现复选框.
该方法也呈现隐藏字段.
我的问题是为什么这个隐藏字段对于禁用复选框有错误值?我相信隐藏字段的目的是在默认的复选框行为上有一些额外的行为
有没有办法覆盖默认的MVC功能,以便即使在禁用模式下,此隐藏字段的值也基于复选框的状态?