如何在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

我发现最好和最正确的方法是从视图模型中删除字段。 如果用户不允许更改字段,那么它不应该是回发的一部分。