我正在使用 razor 开发 asp .net mvc 项目。
我正在尝试按如下方式在 JavaScript 中访问我的模型
alert(Model.SecurityProfile); alert(model.SecurityProfile); alert(@Model.SecurityProfile); alert(@model.SecurityProfile);var SecurityProfileViewModel = { ViewModel: model, Id: SecurityProfileId, ProfileId: $('#ProfileId').val(), JobTitleId: $('#JobTitle').val(), SecurityProfileTypeId: $('#SecurityProfileType').val(), Status: $('#ddlStatus').val(), Reason: $('#txtReason').val(), Mode: $('#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'; } });
但是没有任何作用。我收到模型未定义错误
最佳答案
就 JavaScript 而言,
model
未定义。您 View 中的服务器端代码在服务器端执行。 JavaScript 对此没有概念。它只涉及该代码的客户端输出。您可以某种混合两者,但需要记住,服务器端组件只是用来发出字符串,这些字符串将成为客户端输出的一部分。
因此,例如,如果您的模型上有一个名为:
Model.SomeProperty
那么你就不能像这样直接在 JavaScript 中使用它:
alert(Model.SomeProperty)
// or
alert(SomeProperty)
这并不是使用 razor View 语法来告诉 View 引擎这里有服务器端代码。从语法上讲,这是客户端代码,并且没有 Model
客户端。因此,您需要表明需要进行服务器端预处理:
alert(@Model.SomeProperty)
此外,如果 SomeProperty
是一个字符串,请记住它的输出不会包含引号。因此,您还需要为客户端代码提供这些:
alert('@Model.SomeProperty')
因此,SomeProperty
的服务器端值在呈现给客户端时将在此处发出。因此,如果该值类似于“Hello World”,那么生成的客户端代码将是:
alert('Hello World')
最主要的是要记住服务器端代码和客户端代码之间的分离。就服务器端代码而言,所有 JavaScript/HTML/CSS 只是一大串。该 View 本质上只是创建一个大字符串发送到浏览器。一旦进入浏览器,客户端渲染就会知道 JavaScript/HTML/CSS 之间的差异,并在服务器端代码消失很久之后相应地执行。
关于jquery - javascript asp .net mvc razor 中的访问模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21391402/