Par*_*der 20 javascript asp.net-mvc object
我有c#class say更像AjaxOptions的选项.
public class options
{
public string Url {get;set;}
public string httpMethod {get;set}
}
Run Code Online (Sandbox Code Playgroud)
和这样的javascript函数
function dosomething(obj)
{
if (obj.Url!="" and obj.HttpMethod=="something")
loadsomething();
}
Run Code Online (Sandbox Code Playgroud)
现在在我的Controller动作中
public class mycontroller : controller
{
public ActionResult WhatToDo()
{
options obj = new options{Url="someurl"};
return PartialView(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我需要这个对象类型的字符串,我应该能够传递给我的方法.
@model options
<script>
dosomething(@model.SomeFunctionToConverToString())
</script>
Run Code Online (Sandbox Code Playgroud)
所以我需要这个SomeFunctionToConverToString方法,我将这个对象转换为字符串.
谢谢
Tom*_*mmy 31
您应该能够像在视图中使用模型属性的任何其他输出一样使用它.只需引用要在JS函数中传递的属性.
@model options
<script>
dosomething('@(model.Url)');
</script>
Run Code Online (Sandbox Code Playgroud)
有关在JS中使用Razor的更多信息,请参阅此文章
编辑 - 可能会让你感到困惑的是,如果你的URL被Razor使用上面的HTML编码所破坏,你可以使用@Html.Raw()将传递Url属性而不用HTML编码的函数.
<script>
dosomething('@Html.Raw(model.Url)');
</script>
Run Code Online (Sandbox Code Playgroud)
编辑2 - 另一个SO帖子救援!您最有可能希望将模型转换为JSON以便在Javascript函数中使用.所以...为了做到这一点 - 你需要在视图模型中处理一个JSON对象.
public class optionsViewModel
{
public options Options{get;set;}
public string JsonData{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
并在您的控制器中:
public class mycontroller : controller
{
public ActionResult WhatToDo()
{
options obj = new options{Url="someurl"};
var myViewModel = new optionsViewModel;
myViewModel.options = obj;
var serializer = new JavaScriptSerializer();
myViewModel.JsonData = serializer.Serialize(data);
return PartialView(myViewModel);
}
}
Run Code Online (Sandbox Code Playgroud)
最后是观点:
@model optionsViewModel
<script>
dosomething('@model.JsonData')
</script>
Run Code Online (Sandbox Code Playgroud)
使用此方法,您的函数将按预期工作:
function dosomething(obj)
{
if (obj.Url!="" and obj.HttpMethod=="something")
loadsomething();
}
Run Code Online (Sandbox Code Playgroud)
编辑3可能是最简单的方法吗?与编辑2相同的前提,但这是使用View to JsonEncode模型.对于是否应该在视图,控制器或存储库/服务层中完成,可能有一些好的参数.但是,在视图中进行转换...
@model options
<script>
dosomething('@Html.Raw(Json.Encode(Model))');
</script>
Run Code Online (Sandbox Code Playgroud)
试试这个:
<script type="text/javascript">
var obj= @Html.Raw(Json.Encode(Model));
function dosomething(obj){}
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80117 次 |
| 最近记录: |