Asp.Net MVC将View中的Url.Action对象传递给Controller

时间:2011-07-28 17:59:29

标签: asp.net-mvc

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

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

代码缩写......

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

我的第三个参数是问题,过载的Url.Action(字符串,字符串)工作正常,具有相同的值,所以我没有任何问题到达控制器动作结果方法,我正在使用的值...

查看代码段...

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

控制器代码段...

public ActionResult ControllerActionResult(object pModel)
{
}

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

我错过了一些明显的东西吗?

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

您的代码中可能存在多个问题。但我会回答你想知道的,如何从js向控制器发送数据。您必须首先以json格式发送“model”,可能使用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找不到合适的控制器来呼叫。

答案 2 :(得分:0)

尝试使用以下适用于我的代码

使用Javascript:

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

控制器:

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

希望这适合你。