C# 使用uri内部调用asp mvc方法

C# 使用uri内部调用asp mvc方法,c#,asp.net-mvc,asp.net-mvc-4,iis-7,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/MethodA?someInt=2&someString=oh%crap%20crap%20crap 现在,, 我在methodB里面,我需要给meth

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

谢谢。

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


如果您试图将页面的一部分插入到由其他控制器调用的视图中,则需要使用部分操作。看一看解释。本文讨论的是MVC2,但类似的API也适用于MVC4,您实际上不需要做任何事情。。。让你的控制器动作看起来像

    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; }
}
模型绑定器将自动分割url字符串,并在将接收到的数据存储到ViewModel中时对其进行解码,调用TestA(MyViewModel vm)时会出现这种情况。 如果数据来自URL,请确保您没有将[HTTPPOST]属性设置为操作,因为这将使模型绑定器搜索要绑定到模型的post数据

上述操作的示例视图:

TestA.cs @{ ViewBag.Title=“TestA”; }

TestA

someint:@ViewBag.someint

somestring:@ViewBag.somestring

TestB.cs @{ ViewBag.Title=“TestB”; }

TestB

这是打字错误吗?如果您已经有
MethodA
的url,那么为什么不简单地重拨一下呢?谢谢。你用了“new{someint=2,somestring=“Oh-Crap-Crap”}”,我把它们都当成了“MyController/MethodA?someint=2&somestring=Oh%Crap%20crap”。这意味着我必须在测试b中执行split或indexOf以分配它们。有没有办法避免它,因为我有完整的url。url上有几种方法。。。。这有助于创建url字符串。。创建url最简单的方法是使用这样的方法,并添加所有要在匿名对象中传递的参数。。。基本上URL方法所做的就是创建一个URL字符串。。。所以如果您将ViewBag.UrlToCall=“MethodA?someInt=2&someString=oh%crap%20crap%20crap”。。。这应该也行。。。只需删除“myController”,因为默认情况下mvc总是为同一控制器“Url上的多个方法”创建LINNK,例如哪个?进入控制器方法,键入“Url”。然后点击STRG+SPACE以获取Url的intellisense集合。。。应该有Url.Action(…)Url.RouteUrl(…)或Url.HttpRouteUrl(…)顺便说一句,您在示例中给出的Url缺少一个20。。。哦%crap应该是哦%20 crap…我不认为这是一种代码气味。有时客户端使用参数调用methodA,有时使用其他参数调用methodB。将methodB看作重载的methodA。methodB还获取对methodA的已保存uri调用。现在有没有一种不用拆分和调用另一个方法就可以使用它的方法?
<h2>TestA</h2>

<p>
    someint: @ViewBag.SomeInt
</p>
<p>
    somestring: @ViewBag.SomeString
</p>
<h2>TestB</h2>

<a href="@ViewBag.UrlToCall">Click Here To Call TestA</a>