如何在ASP.NET MVC中提交禁用的input?
如何在ASP.NET MVC中提交禁用的input?
你不能让字段readonly="readonly"
而不是disabled="disabled"
? 只读字段值将被提交给服务器,同时仍然是用户不可编辑的。 尽pipe一个SELECT
标签是一个例外。
谢谢大家:
我解决这个问题的方式是:
document.getElementById("Costo").readOnly = true; document.getElementById("Costo").style.color = "#c0c0c0";
注意:
我得到了这个答案的信息,但我得到了编辑。
通常情况下,如果我有一个字段是“只读”,但需要提交回服务器,我会禁用显示(或简单的文本),但添加一个隐藏的字段具有相同的名称。 您仍然需要确保该字段在服务器端没有实际修改 – 只是不要从您的操作中的模型更新它,但是如果出现错误,模型状态仍然是准确的。
@ppumkin在他对这个答案的评论中提到了这一点,但我想强调一下,因为我无法find关于从禁用的<select>
提交数据的其他资源。 我也相信它是相关的问题,因为select不是<input>
而是“input”。
只需包括禁用select的隐藏字段,并将其全部sorting。
例:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@ @Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
注意:这会在页面上放置两个具有相同ID的标签,这并不是真正有效的HTML,并且可能会导致JavaScript头疼。 对我来说,我有javascript来设置下拉列表的值,如果你先把隐藏的字段,JavaScript会发现,而不是select
。
你也可以在表单提交之前使用这样的代码:
$(":disabled", $('#frmMain')).removeAttr("disabled");
您可以创build一个如下所示的编辑器模板
CSS
.disabled { background-color:lightgray; }
编辑器模板
@model string @Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })
当我们正在处理禁用但检查checkbox,我们要发布的价值,我们需要确保我们隐藏的领域出现在@ Html.CheckBoxFor隐藏的领域。
以下是我find答案的链接。 http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
我发现最好和最正确的方法是从视图模型中删除字段。 如果用户不允许更改字段,那么它不应该是回发的一部分。