如何从Model到JavaScript MVC 4获取数据?

时间:2013-12-09 13:11:06

标签: javascript asp.net asp.net-mvc asp.net-mvc-4

这是我的功能:

 <script> function Calculate()
     {
         var ItemPrice = document.getElementById("price");
         var weight = document.getElementById("weight");
         var SelWeight = weight.options[weight.selectedIndex].value;
         alert(SelWeight);
         var Category = document.getElementById("SelectedCategory");
         var SelCategory = Category.options[Category.selectedIndex].value;
         alert(SelCategory);

     }
    </script>

我想让SelCategories.TaxSelCategories.Duty将它们添加到重量值和总价格中以显示标签中的总数..我正在使用 ASP.NET MVC 4 这是我想要使用的模型

public class CategoriesModel
    {
        public int CategoryID { get; set; }
        public string CategoryName { get; set; }
        public decimal Duty { get; set; }
        public decimal Tax { get; set; }
        public IEnumerable<SelectListItem> CategoriesList { get; set; }
    }

4 个答案:

答案 0 :(得分:26)

我认为这里最好的方法是使用Json和类似Vue.jsKnockout.js等等(如果你的情况很简单,你也可以不用这些库)。

首先,您需要在PM控制台中使用命令安装Json支持:

PM> install-package NewtonSoft.Json

然后,在您的视图中,您可以将模型转换为javascript对象,如下所示:

@model ...
@using Newtonsoft.Json

...

<script type="text/javascript">

    var data = @Html.Raw(JsonConvert.SerializeObject(this.Model));

</script>

然后,您可以使用纯JavaScript访问模型中的所有属性:

var id = data.CategoryID;

就是这样!使用knockout(更新2018:这已经过时了,没有理由你现在应该使用knockout)如果你的逻辑很复杂并且你想让你的视图更强大。这对新手来说可能有点混乱,但是当你得到它时,你将获得超级强大的知识,并且能够显着简化你的视图代码。

答案 1 :(得分:2)

您需要创建返回JsonResult的操作(控制器中的方法)。

从客户端,对服务器进行ajax调用以恢复和使用该数据。最简单的方法是使用任何jQuery ajax方法。

   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);
    }

当您使用jQuery访问/ ControllerName / GetData / id 时,您将在成功回调中获得一个可在浏览器中使用的JavaScript对象。此JavaScript对象将具有您在服务器端定义的完全相同的属性。

例如:

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
    );
}

当然,在成功回调中,只需使用响应对象,而不是发出警报,例如

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

请注意,服务器中定义的age属性可以在JavaScript响应中使用。

答案 2 :(得分:1)

如果你喜欢上课,请尝试jsmodel。将mvc视图模型转换为javascript后,它增加了检索DOM更新的好处。

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

然后,只要您想获得DOM的最新状态,就可以执行此操作来更新变量:

var model = jsmodel.refresh();

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

还有一个nuget: https://www.nuget.org/packages/jsmodel/

答案 3 :(得分:0)

rotation