How to get Data from Model to JavaScript MVC 4?

后端 未结 4 1944
借酒劲吻你
借酒劲吻你 2021-02-13 23:10

that\'s my function:

 

        
相关标签:
4条回答
  • 2021-02-13 23:21
    var errors = '@Html.Raw(Json.Encode(ViewData.ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage)))';
    var errorMessage=JSON.parse(errors);
    
    0 讨论(0)
  • 2021-02-13 23:33

    You need to create actions (methods in the controller) that return JsonResult.

    From the client side, make ajax calls to the server to recover and use that data. The easiest way to do this is to use any of the jQuery ajax methods.

       public JsonResult GetData(int id)
        {
            // This returned data is a sample. You should get it using some logic
            // This can be an object or an anonymous object like this:
            var returnedData = new
            {
                id,
                age = 23,
                name = "John Smith"
            };
            return Json(returnedData, JsonRequestBehavior.AllowGet);
        }
    

    When you use a jQuery get to the /ControllerName/GetData/id, you'll get a JavaScript object in the success callback that can be used in the browser. This JavaScript object will have exactly the same properties that you defined in the server side.

    For example:

    function getAjaxData(id) {
        var data = { id: id };
        $.get('/Extras/GetData/1', // url
            data, // parameters for action
            function (response) { // success callback
                // response has the same properties as the server returnedObject
                alert(JSON.stringify(response)); 
            },
            'json' // dataType
        );
    }
    

    Of course, in the success callback, instead of making an alert, just use the response object, for example

    if (response.age < 18) { ... };
    

    Note that the age property defined in the server can be used in the JavaScript response.

    0 讨论(0)
  • 2021-02-13 23:33

    If you prefer a class try jsmodel. After converting the mvc view model to javascript it adds the benefit of retrieving DOM updates.

    var jsmodel = new JSModel(@Html.Raw(Json.Encode(Model)));
    

    Then anytime you want to get the latest state of the DOM do this to update your variable:

    var model = jsmodel.refresh();
    

    Website: http://chadkuehn.com/jquery-viewmodel-object-with-current-values/

    There is also a nuget: https://www.nuget.org/packages/jsmodel/

    0 讨论(0)
  • 2021-02-13 23:43

    I think the best approach here is to use Json and something like Vue.js, Knockout.js, etc. (but also you can do it without these libraries, if your case is simple).

    First, you need to install Json support with a command in PM console:

    PM> install-package NewtonSoft.Json
    

    Then, in your view you can convert your model to javascript object like this:

    @model ...
    @using Newtonsoft.Json
    
    ...
    
    <script type="text/javascript">
    
        var data = @Html.Raw(JsonConvert.SerializeObject(this.Model));
    
    </script>
    

    Then you can access all the properties in your model with in plain JavaScript:

    var id = data.CategoryID;
    

    That's it! Use knockout (update 2018: this is obsolete, there is no reason you should use knockout now) if your logic is complicated and you want to make your view more powerful. It could be a little bit confusing for newbie, but when you get it, you'll gain the super-powerful knowledge and will be able to simplify your view code significantly.

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