具有模型属性的AJAX帖子

时间:2016-01-06 10:04:45

标签: c# jquery ajax asp.net-mvc

我想做像

这样的事情
$.ajax({
    url: '/Home/AjaxTest', 
    data: {
        id: @Model.Prop
    },
    type: 'post',
    cache: false, 
    success: function (response) {
        console.log(response);
    }
    ...

但是,它没有用。我知道如果我有一个隐藏的字段,比如

@Html.HiddenFor(model => model.Id)

然后我可以通过

获得属性值
data: { id: $('input[name="Id"]').val() },

我仍然在想。有没有其他方法可以更直接地访问Model属性?

2 个答案:

答案 0 :(得分:0)

data: { id: "@Model.Prop" } // may or may not need quotes depending on data type.

如果这样做,它将是呈现页面时Model.Prop字段的值,因此不会反映使用该属性对输入的任何修改。

如果您想要使用EditorFor等呈现的输入控件的实际数据:

data: { @(Model.Prop.GetType().Name): $('input[name="@(ViewData.TemplateInfo.HtmlFieldPrefix + "." + Model.Prop.GetType().Name)"]').val() }

这将使用属性名称作为json索引和相同名称呈现javascript,但包括模型(以及任何包含模型)前缀作为要查找值的元素的名称。

答案 1 :(得分:0)

是的,如果您遵循java脚本的模型模式,则可以执行此操作。 这是你的java脚本文件。

var JSModel = (function(){

       var model = {};


       var init = function(){
           //Perfome your operations
         };

       return {
        init:init,
        model :model  //return beacuse we want to acccess it in cshtml
      };

    })();


    $(document).ready(function() {
        JSModel .init();
    });

现在在cshtml中,你会这样做: //在此处隐藏您的JS文件

<script>
JSModel.model = @Html.Raw(Json.Encode(Model)); // You will get the model in your js file. it will in JSON form

</script>