我试图建立一个功能,我需要在我们的应用程序中创建一个候选人的配置文件。创建候选人的个人资料有两个步骤:
1 -创建模板…用户输入候选人信息
2 -预览模板…当用户将他们的个人资料添加到我们的系统中时,将显示他们的个人资料的预览。
我已经通过一个名为"CandidateController"的控制器创建了支持这些UI的视图,该控制器包含几个操作方法:
1- [HttpGet] "Create"返回一个Create模板。
[HttpGet]
public ViewResult Create()
2- [HttpPost] "Preview"返回一个预览模板。
[HttpPost]
public ActionResult Preview(ProfileViewModel viewModel)
现在我需要实现的是在创建模板中有一个按钮/链接,它将调用控制器中的动作方法[HttpPost] Preview。
我也想知道是否有一种方法,模型绑定器将加载ViewModel对象,如果我能够从第一个创建模板调用HttpPost预览动作方法。
我正在寻找一个建议/帮助如何最好地实现这种功能。
挑战我也想知道是否有一种方法,模型绑定器将加载ViewModel对象为我,如果我能够调用HttpPost从第一个创建模板预览动作方法。
您可以使用标准表单或AJAX调用来调用Preview POST操作,然后传递视图模型的所有属性值。您在此请求中传递的所有值都将是由默认模型绑定器绑定的值。这里有一篇文章解释了默认模型绑定器是如何为更复杂的结构(如列表和字典)期望参数命名的。
AJAX示例:
$.ajax({
url: '@Url.Action("Preview")',
type: 'POST',
data: { Prop1: 'value 1', Prop2: 'value 2' },
success: function(result) {
// TODO: do something with the result returned from the POST action
}
});
如果你不想使用AJAX,你可以使用一个带有隐藏字段的标准表单:
@using (Html.BeginForm())
{
@Html.Hidden("Prop1", "value 1")
@Html.Hidden("Prop2", "value 2")
...
<button type="submit">Preview</button>
}
好了,这些是我需要避开的选项:
- Darin建议你可以用不显眼的方式使用$.ajax(选项),但事情是你可能想要走这种方式只有当你想做部分页面更新或如果你想在同一视图更新/转储新的html工作。
-
如果你不想使用Ajax,而不是使用隐藏字段,你可以简单地使用MVC中的TempData属性,这就是我如何实现我的目标功能使用TempData。p.s.below…
[HttpPost] public ActionResult Create(ViewModel viewModel) { this.TempData["profile"] = viewModel; return RedirectToAction("Preview"); } public ActionResult Preview() { if (TempData["profile"] != null) { return View((ViewModel)TempData["profile"]); } // Handle invalid request... return null; }
所以,这个解决方案对我来说很好,我没有写任何JavaScript或不必要的HTML。并感谢Darin为我指明了一个起点。