2016-01-06 54 views
0

我想要做的事情是AJAX后与模型属性

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

+0

“它没有工作”没有足够的信息来帮助你。你至少检查了控制台是否有错误?假设'@ Model.Prop'的值是一个字符串,你需要用引号括起来:'data:{data:'@ Model.Prop'},' –

+1

你是否直接在你的剃须刀视图中调用你的ajax调用? –

+0

什么是您的控制器方法签名? – devqon

回答

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

+0

此答案如何解决问题,但? –

+0

该问题显示'数据',但该字段被称为'id' –

+0

'模型'对象不应该在那里 – devqon

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,你会做到这一点:// 这里Invlude您的JS文件,然后

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

</script>