我正在研究一个使用模型绑定的MVC
项目。我需要在视图页面中引用的javascript
文件中访问整个模型。
我尝试在视图页面的script标签内对整个模型进行JSON编码。
var model = @Html.Raw(Json.Encode(Model));
console.log(model);
效果很好。
就我而言,整个脚本必须保留在单独的页面中,即。不在视图页面本身内。如何从该脚本页面访问整个模型?
单个属性可以绑定到一个隐藏的输入字段,并且可以通过其ID(即:
)从js访问该值。<input type="hidden" id="modelObject" value="@model.property")/>
var model = $("#modelObject").val();
我需要js页面中的整个模型。如何实现呢?
预先感谢。
答案 0 :(得分:0)
Razor模板输出文本,该文本通常可以是带有text / html内容类型的“页面”(html / css / js)。但是您可以根据需要提供其他内容类型,例如text / javascript。
首先,创建一个装饰有ActionName
属性的控制器动作:
public class ScriptsController {
[ActionName("model.js")]
public ActionResult ModelJs() {
var model = new Object(); // your actual model here.
return View();
}
}
然后您创建视图,就像在当前页面中的script
标签一样:
var model = @Html.Raw(Json.Encode(Model));
确保从当前页面中删除脚本元素。
然后引用页面中的新js视图:
<script type="text/javascript" src="@Url.Action("model.js", "Scripts")"></script>
答案 1 :(得分:-1)
您可以为JavasScript模型创建一个构造函数,然后使用剃刀代码实例化它。
例如:
型号
public class Car{
public string Brand { get; set; }
public string Fuel { get; set; }
}
模块模式中的Javascript文件,但您还可以使用其他内容:
var car = (function(jsonModel){
var runs = "My " + jsonModel.Brand + " runs on " + jsonModel.Fuel;
return {
Runs : runs
}
});
剃刀视图
@model Car
<!--load the javascript file somewhere-->
<script type="text/javascript">
$(function(){
var myFord = new car(@Html.Raw(Json.Encode(@Model)) );
alert(myFord.Runs);
});
</script>
.NET fiddle我无法添加外部javascript文件,但您可能会明白这一点
尽管我应该说不建议使用@ Html.Raw,因为它会使您容易受到XSS攻击(搜索后在Internet上了解更多信息)。最好从控制器返回JSON对象。
修改
这是一个如何在.Net fiddle上使用JsonResult的示例 控制器
[HttpGet]
public JsonResult Car()
{
return Json(new Car("ford","gasoline"), JsonRequestBehavior.AllowGet);
}
剃刀查看JS以获取json结果并实例化JS模块
$(function(){
var model = $.ajax({
url: "@Url.Action("Car","Home")",
dataType: 'json',
contentType: 'application/json; charset=utf-8',
}).done(function(response){
console.log(response);
var myFord = new car(response);
alert(myFord.Runs);
});
});