2012-08-15 88 views
0

我必须从视图中的控制器方法获取值才能写入某些javascript。在网页中,它就像<%= functionName()%>一样简单。有没有办法在MVC中做到这一点。我无法使用模型,因为JavaScript必须在页面加载时可用。任何见解都会被赞赏MVC Razor从javascript的视图中获取控制器的值

回答

8

有没有办法做到这一点在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); 
    }); 
}); 
相关问题