我在asp mvc中有两种方法
methodA(myViewModel vm);
methodB();
myViewModel
public class myViewModel
{
public int someInt...
public string someString...
}
所以uri就是这样的。
... / myController的/治法someInt = 2及?someString = OH%掷骰子%20crap%20crap
现在, 我在methodB里面,我需要调用methodA。 我没有int和字符串,但我持有这样的uri:
string s = "/MyController/MethodA?someInt=2&someString=oh%crap%20crap%20crap"
我可以做一个分裂,但它很难看(实际上我有更多的参数)
有三种方法可以用uri在内部调用mvc方法吗?
感谢。
答案 0 :(得分:1)
你实际上不需要做任何事情......让你的控制器动作看起来像
public ActionResult TestA(MyViewModel vm)
{
ViewBag.SomeInt = vm.someint;
ViewBag.SomeString = vm.somestring;
return View();
}
public ActionResult TestB()
{
ViewBag.UrlToCall = Url.Action("TestA", new { someint=2, somestring="Oh Crap Crap Crap"});
return View();
}
使用给定的ViewModel
public class MyViewModel
{
public int someint { get; set; }
public string somestring { get; set; }
}
并且Model Binder将自动拆分url字符串并在将接收到的数据存储到ViewModel中时对其进行解码,这是调用TestA(MyViewModel vm)时所期望的。 如果数据来自URL,请确保不要将[HTTPPOST]属性设置为操作,因为模型绑定器会搜索要绑定到模型的后期数据。
示例上述操作的视图:
TestA.cs @ { ViewBag.Title =“TestA”; }
<h2>TestA</h2>
<p>
someint: @ViewBag.SomeInt
</p>
<p>
somestring: @ViewBag.SomeString
</p>
TestB.cs @ { ViewBag.Title =“TestB”; }
<h2>TestB</h2>
<a href="@ViewBag.UrlToCall">Click Here To Call TestA</a>
答案 1 :(得分:0)
如果methodA
和methodB
是控制器操作,那么您就会有代码味道。不应该从彼此内部调用控制器动作。如果您有一些与两个操作相关的逻辑,请将其移至另一个不是控制器操作的方法。
如果您尝试将部分页面插入到其他控制器调用的视图中,则需要使用“部分操作”。请查看this article以获取解释。文章讨论了MVC2,但类似的API适用于MVC4