我有c#类说的选项更像AjaxOptions.
public class options { public string Url {get;set;} public string httpMethod {get;set} }
和一个这样的javascript函数
function dosomething(obj) { if (obj.Url!="" and obj.HttpMethod=="something") loadsomething(); }
现在在我的控制器动作
public class mycontroller : controller { public ActionResult WhatToDo() { options obj = new options{Url="someurl"}; return PartialView(obj); } }
在我看来,我需要这个对象种类的字符串,我应该能够传递给我的方法.
@model options <script> dosomething(@model.SomeFunctionToConverToString()) </script>
所以我需要这个SomeFunctionToConverToString方法,我将把这个对象转换成字符串.
谢谢
解决方法
您应该能够像您在视图中的模型属性的任何其他输出一样使用它.只需引用您要在JS函数中传递的属性.
@model options <script> dosomething('@(model.Url)'); </script>
有关在JS中使用Razor的更多信息,请参阅this post
编辑 – 可能会遇到你的东西是,如果你的URL被破坏了Razor使用上面的HTML编码,你可以使用@ Html.Raw()函数,它将传递没有HTML编码的Url属性.
<script> dosomething('@Html.Raw(model.Url)'); </script>
编辑2 – 和another SO post抢救!您最有可能希望将模型转换为JSON,以便在Javascript函数中使用.所以…为了做到这一点,您将需要在视图模型中处理一个JSON对象.
public class optionsviewmodel { public options Options{get;set;} public string JsonData{get;set;} }
并在你的控制器:
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); } }
最后的看法:
@model optionsviewmodel <script> dosomething('@model.JsonData') </script>
function dosomething(obj) { if (obj.Url!="" and obj.HttpMethod=="something") loadsomething(); }
编辑3可能最简单的方法?与编辑2相同的前提,但是这是使用View to JsonEncode模型.这两方面可能有一些好的论据是否应该在视图,控制器或存储库/服务层中完成.但是,在视图中进行转换
@model options <script> dosomething('@Html.Raw(Json.Encode(Model))'); </script>