0
我必须从视图中的控制器方法获取值才能写入某些javascript。在网页中,它就像<%= functionName()%>一样简单。有没有办法在MVC中做到这一点。我无法使用模型,因为JavaScript必须在页面加载时可用。任何见解都会被赞赏MVC Razor从javascript的视图中获取控制器的值
我必须从视图中的控制器方法获取值才能写入某些javascript。在网页中,它就像<%= functionName()%>一样简单。有没有办法在MVC中做到这一点。我无法使用模型,因为JavaScript必须在页面加载时可用。任何见解都会被赞赏MVC Razor从javascript的视图中获取控制器的值
有没有办法做到这一点在MVC
是的,当然。
我无法使用模型,因为JavaScript必须在页面加载时可用。
当然,你可以使用视图模型,没有什么会阻止你这样做。所以,你首先来定义它:
public class MyViewModel
{
public string Foo { get; set; }
}
然后有一个控制器操作将填充这个视图模型,并通过它的观点:
public ActionResult Index()
{
var model = new MyViewModel();
model.Foo = "Hello World";
return View(model);
}
终于在一个强类型的视图这个视图模型其中:
@model MyViewModel
<script type="text/javascript">
$(function() {
var foo = @Html.Raw(Json.Encode(Model.Foo));
alert(foo);
});
</script>
但是,现在让我们假设你不想污染与JavaScript您的看法,但有它在一个单独的js文件,而不是(这当然是正确的做法)。
你可以在某处你的DOM使用HTML5 data-*
属性嵌入值,例如:
<div id="foo" data-model="@Html.Raw(Html.AttributeEncode(Json.Encode(Model)))">
Click me to surprise you
</div>
,然后在一个单独的JavaScript订阅这个元素的click事件和读取data-*
属性中,我们让JSON序列化整个视图模型:
$(function() {
$('#foo').click(function() {
var model = $(this).data('model');
alert(model.Foo);
});
});