Answers:
您不能readonly="readonly"
代替它disabled="disabled"
吗?只读字段值将提交给服务器,同时用户仍然无法对其进行编辑。一个SELECT
标签是只有一个例外。
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>
如何将其变灰以使其看起来像不可编辑。更重要的是我们可以使用类似的东西LabelFor,我试图LabelFor但只得到显示名称....
type="checkbox"
输入也不起作用
谢谢大家:
我解决这个问题的方式:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
注意:
我在答案中得到了这些信息,但是我被编辑了。
$("#textBoxId").css("color", "#c0c0c0")
。
@ppumkin在他对这个答案的评论中提到了这一点,但是我想强调一下它,因为我无法找到其他资源来提交来自残疾人的数据<select>
。我也认为这与问题有关,因为选择不是<input>
s,而是“输入”。
只需为已禁用的选择添加一个“隐藏”字段,并将其全部排序即可。
例:
@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通过它的html来设置下拉列表的值id
,如果您将隐藏字段放在第一位,则javascript会找到它而不是select
。
通常,如果我有一个“只读”字段但需要提交回服务器,则将禁用显示(或仅显示文本),然后添加一个具有相同名称的隐藏字段。您仍然需要确保在服务器端未真正修改该字段-只是不要在操作中从模型中对其进行更新-但是如果有错误,则模型状态仍然是准确的。
您还可以在表单提交之前使用如下代码:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm
?
根据设计,浏览器不支持该功能。
使它们readonly
允许将值提交到服务器,或者如果您要处理的控件仍可用于readonly
诸如Select之类的属性,请添加CSS样式pointer-events: none;
以使其不交互
有点骇客,但是行得通!当您直接使用“提交”按钮而不使用javascript提交表单时,它也可以使用。无需额外的工作!
例如:
<select asp-for="TypeId"
asp-items="@(new SelectList(await TypeRepository.FetchTypesAsync(), "TypeId", "Name"))"
class="form-control form-control-sm"
readonly
style="pointer-events: none;">
</select>
当我们处理禁用但已选中的复选框并希望发布该值时,我们需要确保我们的隐藏字段出现在@ Html.CheckBoxFor隐藏字段之前。
以下是我找到答案的链接。 http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
扩展Tasos'(“:disabled”,$('#xxxForm'))。removeAttr(“ disabled”); 您可以使用:
$("#xxxForm").submit(function (e) {
e.preventDefault();
var form = this;
$('#Field1')[0].disabled = false;
$('#Field2')[0].disabled = false;
...
$('#FieldN')[0].disabled = false;
form.submit(); // submit bypassing the jQuery bound event
});
我通常将这种方式用于CheckBox或CheckBoxFor,因为将其禁用会导致丢失值。只读在复选框上也不起作用。
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
只需将此脚本放在页面的@section脚本中即可。这将在您提交页面时启用输入,并且您应在提交后将用户重定向到另一个页面。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js">
$("form").submit(function () {
if ($('form').valid()) {
$("input").removeAttr("disabled");
}
});
</script>