开发者

Asp.Net MVC Passing an object from Url.Action in View to Controller

While there appears to be similar questions I do not believe I found one where somebody was passing the entire model from view to controller, the closest I found was passing a data value in the model to the controller... which is not what I want to do...

I want to pass the model object to the applicable controller action result as a parameter and do what I want to do with the data in the model object from within the controller...

code abbreviated...

in the view i am using Url.Action(string, string, object) to pass the controller method name, and the route to it as the 2nd parameter, and the entire model object as the 3rd parameter...

my third parameter is the problem, the Url.Action(string, string) over load works fine with the same values, so I don't have any problem getting to the controller action result method, with the values I am using...

view code snippet...

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

controller code snippet...

public ActionResult ControllerActionResult(object pModel)
{
}

My error is "CS1502: The best overloaded method match for 'System.Web.Mvc.UrlHelper.Action(string, string, object)' has some invalid arguments" and the window location line is highlighted...

Am I missing something obviou开发者_StackOverflow社区s?


I don't think you can do that. Url is trying to build a url, not call the action method directly. You can pass individual key value pairs via the anonymous object, which Url can then use to build a link. Model binding can take care of putting the key value pairs into the incoming model for you.

Also, is TheRoute a string as well?

If you need a Url you don't have many alternatives. Either pass all the values to rebuild the model, or just pass a key value to retreive the model from the database again (or maybe session / viewdata / tempdata, if you're using that).


There might be several issues in your code. But I will answer what you want to know, how to send data to controller from js. You have to first send "model" in json format, possibly with jquery.ajax. For example,

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

In controller, you have to have a defined class for the "model" and that should be the parameter of your controller.

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

Otherwise, MVC cannot find a right controller to call.


try with following code it works for me

Javascript:

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

Controller:

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

hope this works for you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜