加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:45:33 所属栏目:asp.Net 来源:网络整理
导读:我有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();
我有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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读