Asp.net mvc将C#对象传递给Javascript

前端之家收集整理的这篇文章主要介绍了Asp.net mvc将C#对象传递给Javascript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有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>

猜你在找的asp.Net相关文章