javascript asp .net mvc razor中的访问模型

Posted

技术标签:

【中文标题】javascript asp .net mvc razor中的访问模型【英文标题】:access model in javascript asp .net mvc razor 【发布时间】:2014-02-18 21:55:58 【问题描述】:

我正在使用 razor 开发 asp .net mvc 项目。

我正在尝试按如下方式在 javascript 中访问我的模型

警报(模型。安全配置文件); 警报(模型.SecurityProfile); 警报(@Model.SecurityProfile); 警报(@model.SecurityProfile);

var SecurityProfileViewModel = 视图模型:模型, 标识:安全配置文件标识, ProfileId: $('#ProfileId').val(), JobTitleId: $('#JobTitle').val(), SecurityProfileTypeId: $('#SecurityProfileType').val(), 状态:$('#ddlStatus').val(), 原因:$('#txtReason').val(), 模式:$('#hidMode').val() ;

    $.ajax(
        url: '/SecurityProfile/Edit',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        data: JSON.stringify(SecurityProfileViewModel),
        success: function (data) 
            alert(data);
            window.location.href = '/SecurityProfile/Index';

        
    );

但是没有任何效果。我得到模型是未定义的错误

【问题讨论】:

这里我已经详细解释过了***.com/a/41312348/2592042 【参考方案1】:

model 是未定义的,就 JavaScript 而言。您视图中的服务器端代码在服务器端执行。 JavaScript 没有这个概念。它只关心该代码的客户端输出。您可以某种混合使用这两者,但需要记住,服务器端组件只是用来发出字符串,这些字符串将成为客户端输出的一部分。

因此,例如,如果您的模型上有一个名为:

Model.SomeProperty

那么你就不能像这样在 JavaScript 中直接使用它:

alert(Model.SomeProperty)
// or
alert(SomeProperty)

这不是使用 razor 视图语法告诉视图引擎这里有服务器端代码。这是语法上的客户端代码,没有Model 客户端。所以你需要指出有服务器端的预处理要做:

alert(@Model.SomeProperty)

另外,如果SomeProperty 是一个字符串,那么请记住它的输出 不会包含引号。因此,您还需要为客户端代码提供这些:

alert('@Model.SomeProperty')

因此,SomeProperty 的服务器端值将在呈现给客户端时在此处发出。因此,如果值类似于"Hello World",那么生成的客户端代码将是:

alert('Hello World')

主要是要记住服务器端代码和客户端代码之间的分离。就服务器端代码而言,所有 JavaScript/html/CSS 都只是一个大字符串。视图本质上只是创建一个大字符串发送到浏览器。一旦进入浏览器,客户端渲染就知道 JavaScript/HTML/CSS 之间的区别并相应地执行,在服务器端代码消失很久之后。

【讨论】:

我明白你的意思。而且效果很好。感谢那。现在,如果我想将模型(对象的实例)本身分配给数据:ajax 调用的一部分,以便在控制器的操作方法参数中访问相同的参数,我应该怎么做? @SARAVAN:不清楚你的意思。 AJAX 调用是请求/响应,就像任何页面加载一样。本质上,您需要在调用中提供数据(例如在包含来自客户端的模型字段的 POST 中)或从数据库持久性中获取模型的数据(例如,如果 POST 仅包含 ID 和模型需要仅基于该 ID 在服务器端构建)。【参考方案2】:

您可以将cshtml中的模型序列化为js变量,以便以后通过javascript访问它

<script>
    var data = @Html.Raw(Json.Serialize(@Model));
</script>

【讨论】:

以上是关于javascript asp .net mvc razor中的访问模型的主要内容,如果未能解决你的问题,请参考以下文章

WebStorm ASP.NET MVC JavaScript 调试

asp.net mvc 显示 ViewBag 字典到 javascript

ASP.NET MVC 视图 - 获取 JavaScript 的虚拟路径 [重复]

asp.net mvc 开发人员的 javascript 最佳实践

ASP.NET Core 2.0 MVC 6. 如何管理每个视图的javascript文件?

从asp.net mvc中的switch case调用javascript函数