2011-09-16 47 views
0

获得加快速度MVC 3,MVC 3问题,EditorFor()TextBoxFor()

有一个问题的[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字段包含空值。

看来EditorFor()方法正在执行一些TextBoxFor()方法没有做的额外工作。

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

感谢

回答

5

残疾人<input>元素不回发到服务器。

由于您在TextBoxFor中设置disabled="disabled",因此浏览器从不将该值发回。

+0

+ 1 - 如果您希望将该值重新发布但不能由用户直接编辑,请考虑Html.HiddenFor(x => x.Whatever) – Tejs

2

禁用的输入不回传。它是html的一部分,你永远不会得到这个价值。如果你想要回发试试只读。

0

使用TextBoxFor()方法,并作为残疾人对象不上服务器后,你可以为TextBoxFor控件添加CSS类作为 .disabled控制 { 显示:无 }