我需要根据用户在表单内的下拉框中做出的选择来更改表单的操作,我在.NET 4.5上有一个MVC4 / C#项目
用户做出的选择将影响需要调用哪个控制器或哪个操作。
我已经做了一些搜索,我已经找到了一些解决方案:
根据我的阅读,人们建议不要使用JQuery,因为您无法确定客户端是否正在运行javascript以及类似的问题。
我一直在玩我的第二个选项,我一直在尝试使用RedirectToAction
在交换机块内执行路由,但是它不能使用POST数据,因为重定向将导致得到。
我在控制器内尝试的一个例子如下:
[HttpPost]
public ActionResult Index(TestObject object)
{
switch (object.Type) {
case("A"):
return RedirectToAction("ActionA");
case ("B"):
return RedirectToAction("ActionB");
case ("C"):
return RedirectToAction("ActionC");
default:
ModelState.AddModelError("", "Invalid Type");
return View();
}
}
[HttpPost]
public ActionResult ActionA(TestObject object)
{
// Do Stuff for ActionA
return View();
}
这是我创建的第一个MVC项目,所以我想知道如果每个人都说不要在这种情况下使用JQuery,那么正确的方法是什么。
如果第二个选项是'正确的'解决方案,如何将数据发送到备用控制器操作?
答案 0 :(得分:2)
目前没有任何方法可以直接将模型传递给RedirectToAction
。这是TempData
的用途:
TempData["MyModel"] = model;
switch (object.Type) {
case("A"):
return RedirectToAction("ActionA");
case ("B"):
return RedirectToAction("ActionB");
case ("C"):
return RedirectToAction("ActionC");
default:
ModelState.AddModelError("", "Invalid Type");
return View();
}
在您的下一个操作中(请注意,这将是一个GET请求,因此您需要取消HttpPost
注释):
var model = TempData["MyModel"] as TestObject;
但是,我是尽可能避免会话存储的忠实粉丝所以,在这种情况下,我不一定会说使用jQuery没有任何优点。鉴于绝大多数现代网站依赖于它,“你可以关闭JavaScript”这一说法是非常没有意义的。
答案 1 :(得分:2)
您可以执行以下操作,即将表单值作为routevalues传递:
RedirectToAction("ACTIONNAME", "CONTROLLERNAME", ROUTEVALUES);
e.g。
this.RedirectToAction("displayimport", "coilenquiry", new { Number = number });
然后在您的操作中,使用参数...
public ActionResult DisplayImport(string Number)
{
}