我有一个网站,使用一个行动的方法,其中传递一个页面名到获取行动的方法。在action方法中,它通过页面名称查找模型项,并将相关内容返回给视图。
我现在已经为此创建了一个POST action方法,因为我需要在我的联系人页面中使用它。我仍然需要通过页面名称找到模型并将其返回到视图,但是,当用户提交联系信息时,我对我的查询模型项执行TryUpdateModel,如果无效,它会将错误返回到模型状态中,验证摘要会显示错误,但他们提交的任何信息都不会重新呈现。
有没有什么办法可以让我返回页面模型,并让textboxes在模型失败时重新呈现它们之前键入的内容?
发布于 2009-11-23 14:08:50
下面是我们要做的(去掉对这个问题不重要的东西):
private ModelType UpdateModel(Guid id)
{
var dbData = (from m in Repository.SelectAll()
where m.Id == id
select new ModelType
{
Id = m.Id,
Data = m.Data
}).First();
return UpdateModel(dbData);
}
private ModelType UpdateModel(ModelType model)
{
//add other data for view:
model.SelectStuff = new SelectList( //...
// etc.
return model;
}
[HttpGet]
public ActionResult Update(Guid id)
{
return View(UpdateModel(id));
}
[HttpPost]
public ActionResult Update(ModelType model)
{
if (!ModelState.IsValid)
{
return View(UpdateModel(model));
}
// else post to repository
}
发布于 2009-11-23 13:29:30
如果您为视图模型添加了一个属性,该属性应该绑定到文本框(在我的示例中为Thing
),您可以使用如下内容:
<%=Html.TextBox("Thing", Model.Thing != null ? Model.Thing : string.Empty)
仁慈,
丹
发布于 2009-11-23 14:20:42
我想我可以使用以下方法:
<input name="ENQ.Name" class="inputText" type="text" maxlength="150" title="Please enter your name" value="<%= ViewData.ModelState["ENQ.Name"] != null ? ViewData.ModelState["ENQ.Name"].Value.AttemptedValue : "" %>" />
https://stackoverflow.com/questions/1783087
复制相似问题