在Asp.net MVC中将一个C#对象传递给Javascript
在Asp.net MVC中将一个C#对象传递给Javascript
我有一个C#类,名为Options,更像是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
因此,我需要这个SomeFunctionToConverToString方法,它将把这个对象转换为字符串。
谢谢
admin 更改状态以发布 2023年5月22日
你应该能够像使用模型属性的任何其他输出一样在视图中使用它。只需引用要传递给JS函数的属性。
@model options
有关在JS内部使用Razor的更多信息,请参见此帖子
编辑 - 可能会让你感到困惑的是,如果你的URL通过使用上述方法进行HTML编码而被破坏,你可以使用@Html.Raw()
函数,它将不对URL属性进行HTML编码。
编辑2 - 另外一篇SO帖子也可以帮到你!您很可能需要将模型转换为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
使用此方法,然后您的函数将按预期工作:
function dosomething(obj) { if (obj.Url!="" and obj.HttpMethod=="something") loadsomething(); }
编辑3 - 可能是最简单的方法?与编辑2相同的前提,不过这次是在视图中使用View来JsonEncode模型。关于这是否应该在视图、控制器或存储库/服务层中完成,可能会有一些争议。但是,如果要在视图中进行转换...
@model options