我是MVC的新手,我遇到了在页面POST上持久保存值的问题。下面是我想要做的简化版本。基本上我有一个表单,我显示用户名和其他详细信息。在POST ActionResult上,如果业务规则失败,页面应返回到当前视图,否则将继续,但在我的POST上,我在GET中设置的名称和地址不会出现在视图模型的POST中,导致发送空值返回视图(模型)。有没有办法可以持久保存值而无需返回数据库来检索它们?
模型
public class HomeModel
{
public string Forename { get; set; }
public string Surname { get; set; }
public string AddressLine1 { get; set; }
public bool Continue { get; set; }
}
控制器
[HttpGet]
public ActionResult Index()
{
var model = new HomeModel();
model.Forename = "Joe";
model.Surname = "Boe";
model.AddressLine1 = "Unknown";
return View(model);
}
[HttpPost]
public ActionResult Index(HomeModel homeModel)
{
if (homeModel.Continue)
return RedirectToAction("Index", "Form2");
else
return View(homeModel);
}
查看
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.Forename, Model.Forename)<br />
@Html.LabelFor(m => m.Surname, Model.Surname)<br />
@Html.LabelFor(m => m.AddressLine1, Model.AddressLine1)<br /><br />
@Html.CheckBoxFor(m => m.Continue)<br /><br />
<input type="submit" value="Click" />
}
答案 0 :(得分:3)
LabelFor
不会创建HTML input
类型,因此它不会包含在回发中。您可以将它们设为TextBoxFor
,或在标签旁边创建HiddenFor
,以便它们可以保留回服务器
答案 1 :(得分:1)
您可以使用隐藏字段:
@Html.HiddenFor(model => model.ID)
然后将该值发回服务器。这将增加帖子的数据量,对于大型表格是不可取的。
也就是说,您可能最好重建页面加载数据或执行服务器端缓存,否则您将面临输入错误数据的风险。如果只读它,那对你来说可能无关紧要。