具有模型属性的AJAX帖子

本文关键字:AJAX 帖子 属性 模型 | 更新日期: 2023-09-27 18:29:20

我想做一些类似的事情

$.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属性?

具有模型属性的AJAX帖子

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,但包括模型(和任何包含模型)前缀作为要查找值的元素的名称。

是的,如果您遵循java脚本的Model模式,您可以这样做。这是您的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>