内部调用使用uri的asp mvc方法

时间:2013-04-11 10:25:39

标签: c# asp.net-mvc asp.net-mvc-4 iis-7

我在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方法吗? 感谢。

2 个答案:

答案 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)

如果methodAmethodB是控制器操作,那么您就会有代码味道。不应该从彼此内部调用控制器动作。如果您有一些与两个操作相关的逻辑,请将其移至另一个不是控制器操作的方法。

如果您尝试将部分页面插入到其他控制器调用的视图中,则需要使用“部分操作”。请查看this article以获取解释。文章讨论了MVC2,但类似的API适用于MVC4