在MVC 3应用程序中,由于某些文件夹创建逻辑,我需要能够在2个不同的部分中创建视图。在第一个视图中我有一个带有项目名称的文本框,点击下一个按钮我需要创建文件夹对于该项目,我需要一种方法以某种方式在我的下一个视图上获取该项目名称文件夹。现在我按下,然后我松开项目名称,我再也无法得到它。 在互联网上有很多地方以同样的方式实现它,但我无法弄清楚如何做到这一点。
有关如何预先建模的任何解决方案?
答案 0 :(得分:2)
您可以在第二个视图中使用隐藏字段,该字段将包含在第一个视图中输入的项目名称。这样,当您提交第二个表单时,您将获得项目名称和项目文件夹。
另一种可能性是存储在服务器上某处的第一个视图中输入的值(数据库,会话......)
更新:
如评论部分中的请求,这是使用隐藏字段的示例。
第一个观点:
@model FirstStepViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.ProjectName)
<button type="submit">OK</button>
}
然后是第一步提交的控制器动作:
[HttpPost]
public ActionResult Foo(FirstStepViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
return RedirectToAction("Bar", new { projectname = model.ProjectName });
}
然后你将有第二个控制器动作,它将提供第二个视图:
public ActionResult Bar(FirstStepViewModel firstStep)
{
var model = new SecondStepViewModel
{
ProjectName = firstStep.ProjectName
};
return View(model);
}
然后你会有一个相应的观点:
@model SecondStepViewModel
@using (Html.BeginForm())
{
@Html.HiddenFor(x => x.ProjectName)
@Html.EditorFor(x => x.ProjectFolder)
<button type="submit">OK</button>
}
将发布到最终动作:
[HttpPost]
public ActionResult Bar(SecondStepViewModel model)
{
// here you will get both model.ProjectName and model.ProjectFolder
...
}
答案 1 :(得分:0)
您还可以一次加载表单的所有部分,然后使用选项卡式布局(例如jQuery UI Tabs)并在最后一步提交整个表单。