【问题标题】:Asp.Net MVC Passing an object from Url.Action in View to ControllerAsp.Net MVC将对象从视图中的Url.Action传递给控制器
【发布时间】:2011-10-15 08:44:23
【问题描述】:

虽然似乎有类似的问题,但我不相信我发现有人将整个模型从视图传递到控制器,但我发现最接近的是将模型中的数据值传递给控制器​​......这不是我想做什么...

我想将模型对象作为参数传递给适用的控制器动作结果 并从控制器中对模型对象中的数据执行我想要执行的操作...

代码缩写...

在视图中,我使用 Url.Action(string, string, object) 传递控制器方法名称,并将其路由作为第二个参数,并将整个模型对象作为第三个参数...

我的第三个参数是问题所在,Url.Action(string, string) 过载可以在相同的值下正常工作,因此使用我正在使用的值访问控制器操作结果方法没有任何问题...

查看代码sn-p...

$('#ControllerActionResult').click(function (e) {
  window.location = '<%: Url.Action("ControllerActionResult", TheRoute, new { pModel = Model } ) %>';
});

控制器代码 sn-p...

public ActionResult ControllerActionResult(object pModel)
{
}

我的错误是“CS1502:'System.Web.Mvc.UrlHelper.Action(string, string, object)' 的最佳重载方法匹配有一些无效参数”并且窗口位置行被突出显示...

我是否遗漏了一些明显的东西?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    我认为你做不到。 Url 是尝试构建一个 url,而不是直接调用 action 方法。您可以通过匿名对象传递单个键值对,然后 Url 可以使用该对象来构建链接。模型绑定可以为您将键值对放入传入模型中。

    另外,TheRoute 也是一个字符串吗?

    如果您需要一个 URL,那么您没有很多选择。要么传递所有值来重建模型,要么只传递一个键值以再次从数据库中检索模型(或者可能是 session / viewdata / tempdata,如果你正在使用它)。

    【讨论】:

    • 是的,路由参数实际上是作为 Model.TheRoute 传入的,如下所示... public static readonly RouteValueDictionary TheRoute = new RouteValueDictionary(new { controller = "Home", action = "ControllerActionResult ", 面积 = "" });
    • TheRoute 必须是您调用的重载字符串,而不是 RouteValueDictionary
    • 当我使用具有相同 routevaluedictionary 和值的 Url.Action(string, string) 并在没有参数的同一控制器中调用操作结果时,它工作得很好......所以我很确定当我使用 Url.Action(string, string, object) 时的第三个参数是我的问题......同样,当调用 jquery click 事件时,我已经在视图使用的模型中拥有了我想要的数据,我只想将模型传递给控制器​​并使用其中包含数据的任何模型值。如果我不能将整个模型从视图传递到控制器,有哪些可能的替代方案?
    • 我怀疑你的电话Url.Action(string, string)。大概(string, object)
    • My bad ... 公共方法 Action(String, RouteValueDictionary) 为指定的操作名称和路由值生成操作方法的完全限定 URL。公共方法 Action(String, String, Object) 使用指定的操作名称、控制器名称和路由值生成操作方法的完全限定 URL...msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    您的代码中可能存在多个问题。但我会回答你想知道的,如何从 js 向控制器发送数据。您必须首先以 json 格式发送“模型”,可能使用 jquery.ajax。例如,

    $.ajax({
       url: '@Url.Action("ControllerActionResult")',
       type: 'POST',
       data: JSON.stringify(model),
       dataType: 'json',
       processData: false,
       contentType: 'application/json; charset=utf-8',
       success: OnSuccess
    });
    

    在控制器中,您必须为“模型”定义一个类,这应该是您的控制器的参数。

    [HttpPost]
    public ActionResult ControllerActionResult(Model model) {
      if (Request.IsAjaxRequest()) {
       //to do
      }
    }
    

    否则,MVC 找不到合适的控制器来调用。

    【讨论】:

    • 谢谢,试一试,关于将模型输入 JSON.stringify(model) 有什么建议吗?看起来它需要先序列化,模型是服务器端,而这是客户端......建议?还没有使用过json。
    【解决方案3】:

    尝试以下代码,它对我有用

    Javascript:

    var location ='@url,action(string ,obj)'; window.location=location;
    

    控制器:

    public ActionResult index(string obj){return view();}
    

    希望这对你有用。

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      相关资源
      最近更新 更多