我遇到了一个奇怪的情况。我有以下viewmodel:
public class Document{
public string DocNumber{get;set;}
public string LastName {get;set;}
//omitted for brevity
}
有一个名为EditDocument的视图强烈输入此模型。在另一个视图中,我有以下操作链接:
@Html.ActionLink("Edit", "EditDocument", "InwardDocument", new { docNumber=Model.DocNumber},null)
以下是EditDocument
控制器中的InwardDocument
操作方法:
public ActionResult EditDocument(string docNumber){
DocumentRepository repository = new DocumentCitizenRepository();
Document doc = repository.Documents.SingleOrDefault(x => x.DocNumber == docNumber);
return View(viewName:"EditDocument",model: doc);
}
最后,这是EditDocument.cshtml:
@using (Html.BeginForm("SaveDocument","InwardDocument")){
//omitted for brevity
<input type="submit" value="Save">
}
SaveDocument操作方法接收Document对象作为模型。当我调试此方法时,我发现该模型的DocNumber属性为null。但是在调试EditDocument方法时,从存储库检索的Document的DocNumber属性值不为null(以下为“1”)。 作为一种解决方法,我试图将Model传递给BeginForm方法,如下所示:
@using (Html.BeginForm("SaveDocument","InwardDocument",new RouteValueDictionary(Model)))
确实有助于解决问题,但我有两个问题:
答案 0 :(得分:1)
你必须在表单的隐藏字段中传递DocNumber
,否则它将被发布为null:
@using (Html.BeginForm("SaveDocument","InwardDocument"))
{
@Html.HiddenFor(x=>x.DocNumber)
<input type="submit" value="Save">
}