C# 具有模型属性的ajaxpost

C# 具有模型属性的ajaxpost,c#,jquery,ajax,asp.net-mvc,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(m

我想做一些像

$.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() },
我仍然怀疑。还有其他更直接地访问模型属性的方法吗

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脚本的模型模式,您可以这样做。 这是您的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>

JSModel.model=@Html.Raw(Json.Encode(model));//您将在js文件中获得模型。它将以JSON的形式出现

“它不起作用”的信息不足以帮助您。您是否至少检查了控制台的错误?假设
@Model.Prop
的值是一个字符串,您需要用引号将其括起来:
数据:{data:'@Model.Prop'},
您是否直接在razor视图上调用ajax调用?您的控制器方法签名是什么?您使用参数名
data
发送数据,但在第二种方法中,您将其作为参数
id
传递。我已使用您真正想要的内容更新了我的答案。问题显示“数据”,但字段名为“id”
模型
对象不应在其中