快速了解MVC 3,
查看传递数据的[HttpPost] ActionResult方法存在问题,具体取决于我是否在视图中使用EditorFor()或TextBoxFor()。
我的编辑视图中有一些字段,我想要只读,所以我使用了:
<div class="editor-field">
@Html.EditorFor(model => model.ModelNumber)
@*Html.TextBoxFor(model => model.ModelNumber, new { disabled = "disabled", @readonly = "readonly" })*@
@*Html.ValidationMessageFor(model => model.ModelNumber)*@
</div>
这是ActionResult控制器方法:
public ActionResult Edit(int id)
{
var NPSProc = db.NPSProcesseds.SingleOrDefault(p => p.Id == id);
return View(NPSProc);
}
[HttpPost]
public ActionResult Edit(NPSProcessed Processed)
{
try
{
if (ModelState.IsValid)
{
db.Entry(Processed).State = EntityState.Modified;
db.SaveChanges();
return new RedirectResult("~/Home", false);
}
else
{
return View("Edit", Processed);
}
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
}
}
return View("Edit", Processed);
}
当我删除EditorFor()方法的注释时,ModelNumber字段在传递给HttpPost ActionResult方法的Processed对象中包含一个值ModelNumber。
如果我对EditorFor()方法发表评论并删除TextBoxFor()方法的注释 MethodNumber字段包含null。
似乎EditorFor()方法正在执行一些TextBoxFor()方法没有做的额外工作。
有人能指出我正确的方向并指出我正在犯的错误。
由于
乔
答案 0 :(得分:5)
已禁用的<input>
元素未发回服务器。
由于您在disabled="disabled"
中设置了TextBoxFor
,因此浏览器永远不会再发送该值。
答案 1 :(得分:2)
禁用的输入不会回发。它是html的一部分,你永远不会得到它的价值。如果您希望它回发,请尝试readonly。
答案 2 :(得分:0)
使用TextBoxFor()方法,并且由于禁用的对象不在服务器上发布,您可以为该TextBoxFor控件添加 css类 的 .disabled控制 { 显示:无 } 强>