How to send a model in jQuery $.ajax() post request to MVC controller method

前端 未结 7 1786
南方客
南方客 2020-11-27 02:47

In doing an auto-refresh using the following code, I assumed that when I do a post, the model will automatically sent to the controller:

$.ajax({
    url: \'         


        
相关标签:
7条回答
  • 2020-11-27 03:01

    The simple answer (in MVC 3 onwards, maybe even 2) is you don't have to do anything special.

    As long as your JSON parameters match the model, MVC is smart enough to construct a new object from the parameters you give it. The parameters that aren't there are just defaulted.

    For example, the Javascript:

    var values = 
    {
        "Name": "Chris",
        "Color": "Green"
    }
    
    $.post("@Url.Action("Update")",values,function(data)
    {
        // do stuff;
    });
    

    The model:

    public class UserModel
    {
         public string Name { get;set; }
         public string Color { get;set; }
         public IEnumerable<string> Contacts { get;set; }
    }
    

    The controller:

    public ActionResult Update(UserModel model)
    {
         // do something with the model
    
         return Json(new { success = true });
    }
    
    0 讨论(0)
  • 2020-11-27 03:02

    In ajax call mention-

    data:MakeModel(),
    

    use the below function to bind data to model

    function MakeModel() {
    
        var MyModel = {};
    
        MyModel.value = $('#input element id').val() or your value;
    
        return JSON.stringify(MyModel);
    }
    

    Attach [HttpPost] attribute to your controller action

    on POST this data will get available

    0 讨论(0)
  • 2020-11-27 03:08

    If you need to send the FULL model to the controller, you first need the model to be available to your javascript code.

    In our app, we do this with an extension method:

    public static class JsonExtensions
    {
        public static string ToJson(this Object obj)
        {
            return new JavaScriptSerializer().Serialize(obj);
        }
    }
    

    On the view, we use it to render the model:

    <script type="javascript">
      var model = <%= Model.ToJson() %>
    </script>
    

    You can then pass the model variable into your $.ajax call.

    0 讨论(0)
  • 2020-11-27 03:14

    I think you need to explicitly pass the data attribute. One way to do this is to use the data = $('#your-form-id').serialize();

    This post may be helpful. Post with jquery and ajax

    Have a look at the doc here.. Ajax serialize

    0 讨论(0)
  • 2020-11-27 03:16

    you can create a variable and send to ajax.

    var m = { "Value": @Model.Value }
    
    $.ajax({
        url: '<%=Url.Action("ModelPage")%>',
        type: "POST",
        data:  m,
        success: function(result) {
            $("div#updatePane").html(result);
        },
    
        complete: function() {
        $('form').onsubmit({ preventDefault: function() { } });
    
        }
    });
    

    All of model's field must bo ceated in m.

    0 讨论(0)
  • 2020-11-27 03:20

    I have an MVC page that submits JSON of selected values from a group of radio buttons.

    I use:

    var dataArray = $.makeArray($("input[type=radio]").serializeArray());
    

    To make an array of their names and values. Then I convert it to JSON with:

    var json = $.toJSON(dataArray)
    

    and then post it with jQuery's ajax() to the MVC controller

    $.ajax({
    url: "/Rounding.aspx/Round/" + $("#OfferId").val(),
    type: 'POST',
    dataType: 'html',
    data: json, 
    contentType: 'application/json; charset=utf-8',
    beforeSend: doSubmitBeforeSend,
    complete: doSubmitComplete,
    success: doSubmitSuccess});
    

    Which sends the data across as native JSON data.

    You can then capture the response stream and de-serialize it into the native C#/VB.net object and manipulate it in your controller.

    To automate this process in a lovely, low maintenance way, I advise reading this entry that spells out most of native, automatic JSON de-serialization quite well.

    Match your JSON object to match your model and the linked process below should automatically deserialize the data into your controller. It's works wonderfully for me.

    Article on MVC JSON deserialization

    0 讨论(0)
提交回复
热议问题