MVC 3问题,EditorFor()TextBoxFor()

时间:2011-09-16 18:26:52

标签: c# asp.net-mvc-3

快速了解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()方法没有做的额外工作。

有人能指出我正确的方向并指出我正在犯的错误。

由于

3 个答案:

答案 0 :(得分:5)

已禁用的<input>元素未发回服务器。

由于您在disabled="disabled"中设置了TextBoxFor,因此浏览器永远不会再发送该值。

答案 1 :(得分:2)

禁用的输入不会回发。它是html的一部分,你永远不会得到它的价值。如果您希望它回发,请尝试readonly。

答案 2 :(得分:0)

使用TextBoxFor()方法,并且由于禁用的对象不在服务器上发布,您可以为该TextBoxFor控件添加 css类 .disabled控制 { 显示:无 }