0

我在asp mvc中有两种方法

methodA(myViewModel vm);
methodB();

myViewModel 是

public class myViewModel
{
  public int someInt...
  public string someString...
}

所以uri是这样的。

..../MyController/MethodA?someInt=2&someString=oh%crap%20crap%20crap

现在,我在methodB里面,我需要调用methodA。我没有 int 和 string,但我持有这样的 uri:

string s = "/MyController/MethodA?someInt=2&someString=oh%crap%20crap%20crap"

我可以做一个拆分,但它很难看(实际上我有更多参数)
是三种用 uri 在内部调用 mvc 方法的方法吗?
谢谢。

4

2 回答 2

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 将接收到的数据存储到调用 TestA(MyViewModel vm) 时预期的 ViewModel 时,它会自动拆分 url 字符串并对其进行解码。如果数据应该来自 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>
于 2013-04-11T10:48:47.457 回答
0

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

如果您尝试将页面的一部分插入到由其他控制器调用的视图中,则需要使用 Partial Action。看看这篇文章以获得解释。文章讲的是MVC2,但是类似的API适用于MVC4

于 2013-04-11T10:48:22.740 回答