当客户端点击“编辑”时,我有一个网格,就像表单打开一样。用户只能编辑一些值(让用户只编辑当前订单的发货日期),但是当我发送表格时,不可编辑字段的值在发布时为NULL
当我显示:
@Html.Display(model => model.Rep)
或:
@Html.TextBoxFor(model => model.ClientName, new { disabled = "disabled", @readonly = "readonly" })
值正确显示但是当我提交表单时,Value为Null。 观点:
@model Models.Orders
@{
Layout = null;
}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="~/Content/pure-release-0.5.0/pure-min.css" rel="stylesheet" />
</head>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<body>
<form class="pure-form">
<fieldset>
<legend>A Stacked Form</legend>
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-3" aria-disabled="true" aria-readonly="true">
<label for="first-name">@Html.LabelFor(model => model.Rep)</label>
@Html.Display(model => model.Rep)
</div>
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-3" aria-readonly="true">
<label for="first-name">@Html.LabelFor(model => model.ClientName)</label>
@Html.TextBoxFor(model => model.ClientName, new { disabled = "disabled", @readonly = "readonly" })
</div>
</div>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
</form>
</body>
}
</html>
<script type="text/javascript">
$(document).ready(function () {
$(".Titre").click(function () {
$(this).next('.Contenu').slideToggle("slow");
});
$("#Model").prop('disabled', true);
});
</script>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}^
模特:
public class Orders
{
public int ID { get; set; }
public string Rep { get; set; }
public string ClientName { get; set; }
}
控制器:
当用户点击网格上的编辑时:
public ActionResult Edit(int id = 0)
{
Orders order = db.Orders.Find(id);
if (order == null)
{
return HttpNotFound();
}
return View(order);
}
在帖子上:
[HttpPost]
public ActionResult Edit(Orders order)
{
if (ModelState.IsValid)
{
db.Entry(order).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(order);
}
当我调试时,我发现命令中的值为NULL
我认为问题是我从网格向表单发送数据的问题,但我将easyui更改为Use GridMVC并仍然存在问题。
我使用:在View TextBoxFor中将readOnly +禁用为attribut但同样的问题
我试过了:
在模型中:[ReadOnly(true)]
+在视图中:@Html.EditorFor(model => model.Rep)
但我能够编辑我要阻止的Rep
我尝试使用Javascript编辑EditorFor,但我能够编辑
你能帮助我吗,我尝试了所有我发现但我的代码中缺少的东西
由于
答案 0 :(得分:0)
这是设计的。只读值不会提交给服务器(至少现代浏览器)。
如果您想提交此值,则可以创建隐藏字段而不是文本框:
@Html.HiddenFor(model => model.ClientName)
这将有效地将您的价值提交给服务器
答案 1 :(得分:0)
问题是因为您使用了两种形式:一种嵌套到另一种形式。您必须删除第二个并将css类添加到第一个。 Html.BeginForm()
将创建另一种形式。
你可以尝试这样的事情:
@using (Html.BeginForm("Edit","controllerName",null,FormMethod.Post,{@class="pure-form"}))
{
@Html.ValidationSummary(true)
<body>
@Html.HiddenFor(model => model.ID)
<fieldset>
<legend>A Stacked Form</legend>
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-3" aria-disabled="true" aria-readonly="true">
<label for="first-name">@Html.LabelFor(model => model.Rep)</label>
@Html.Display(model => model.Rep)
</div>
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-3" aria-readonly="true">
<label for="first-name">@Html.LabelFor(model => model.ClientName)</label>
@Html.TextBoxFor(model => model.ClientName, new { disabled = "disabled", @readonly = "readonly" })
</div>
</div>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
</body>
}
答案 2 :(得分:0)
您的文字框已停用。带有disabled
属性集的输入不会随表单一起提交。您可以使用Chrome开发工具的网络标签或您喜欢的浏览器来验证这一点。如果要禁用文本框,请仅使用readonly而不是禁用。因此,您的文本框应如下所示:
@Html.TextBoxFor(model => model.ClientName, new {@readonly = "readonly" })
之后,您可以使用jQuery和CSS,如果您愿意,可以通过将它们变灰来使它们看起来像禁用,但如果您希望值通过则不要使用禁用。
答案 3 :(得分:0)
我遇到了同样的问题。尝试使用MVC CRUD模板进行快捷方式。我喜欢@PaulTaylor的建议: