且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

通过模型为了使用Jquery / Ajax控制器

更新时间:2023-02-25 17:29:48

看起来像你的 IndexPartial 操作方法有一个参数,它是一个复杂的对象。如果你是路过一大把的数据(复杂的对象),这可能是一个好主意,你的操作方法转换为 HttpPost 操作方法,并使用jQuery 发布的数据来表示。 GET对查询字符串值的限制。

  [HttpPost]
公共PartialViewResult IndexPartial(DashboardViewModel米)
{
   //可能要张贴的模式传递给parial看法?
   返回PartialView(_ IndexPartial);
}

您的脚本应该是

  VAR URL =@ Url.Action(IndexPartial,YourControllerName);VAR模型= {名称:Shyju,地点:底特律};$。员额(URL,型号,功能(RES){
   //资源包含了由局部视图返回的标记
   //你可能想的设置为某个事业部。
   $(#SomeDivToShowTheResult)HTML(RES);
});

假设名称位置是你的 DashboardViewModel 的性能>类和 SomeDivToShowTheResult 是要加载从partialview来的内容在页面中一个div的id。

发送复杂的对象?

如果您愿意,您可以建立JS更复杂的对象。作为你的结构视图模型类匹配模型绑定将只要工作

  VAR模型= {名称:Shyju
              位置:底特律,
              兴趣爱好:[code,咖啡,#1]
            };$阿贾克斯({
    键入:POST,
    数据:JSON.stringify(模型),
    网址:网址,
    的contentType:应用/ JSON
})。完成(功能(RES){
    $(#SomeDivToShowTheResult)HTML(RES);
});

对于上面的js模型转化为你的方法参数,您的视图模型应该是这样的。

 公共类DashboardViewModel
{
  公共字符串名称{集;获取;}
  公共字符串位置{集;获取;}
  公开名单<串GT;兴趣爱好{集;获取;}
}

而在你的操作方法,指定[FromBody]

  [HttpPost]
公共PartialViewResult IndexPartial([FromBody] DashboardViewModel米)
{
    返回PartialView(_ IndexPartial,米);
}

I am trying to pass my model to a controller using JQuery/Ajax, I'm not sure how to do this correctly. So far I have tried using Url.Action but the model is blank.

Note: none of the duplicate threads on *** seem to address using ASP.NET 5 MVC 6.

View:

$("#inpDateCompleted").change(function () {
        var url = '@(Url.Action("IndexPartial", "DashBoard", Model, null))';
        $("#DailyInvoiceItems").load(url);
});

Controller:

 [HttpGet]
 public PartialViewResult IndexPartial(DashBoardViewModel m)
 {
      // Do stuff with my model
      return PartialView("_IndexPartial");
 }

Looks like your IndexPartial action method has an argument which is a complex object. If you are passing a a lot of data (complex object), It might be a good idea to convert your action method to a HttpPost action method and use jQuery post to post data to that. GET has limitation on the query string value.

[HttpPost]
public PartialViewResult IndexPartial(DashboardViewModel m)
{
   //May be you want to pass the posted model to the parial view ?
   return PartialView("_IndexPartial");
}

Your script should be

var url = "@Url.Action("IndexPartial","YourControllerName")";

var model = { Name :"Shyju", Location:"Detroit"};

$.post(url, model ,function(res){
   //res contains the markup returned by the partial view
   //You probably want to set that to some Div.
   $("#SomeDivToShowTheResult").html(res);
});

Assuming Name and Location are properties of your DashboardViewModel class and SomeDivToShowTheResult is the id of a div in your page where you want to load the content coming from the partialview.

Sending complex objects ?

You can build more complex object in js if you want. Model binding will work as long as your structure matches with the viewmodel class

var model = { Name :"Shyju", 
              Location:"Detroit", 
              Interests : ["Code","Coffee","***"]
            };

$.ajax({
    type: "POST",
    data: JSON.stringify(model),
    url: url,
    contentType: "application/json"
}).done(function (res) {
    $("#SomeDivToShowTheResult").html(res);
});

For the above js model to be transformed to your method parameter, Your View Model should be like this.

public class DashboardViewModel
{
  public string Name {set;get;}
  public string Location {set;get;}
  public List<string> Interests {set;get;}
}

And in your action method ,specify [FromBody]

[HttpPost]
public PartialViewResult IndexPartial([FromBody] DashboardViewModel m)
{
    return PartialView("_IndexPartial",m);
}