在Asp.net MVC中将一个C#对象传递给Javascript

19 浏览
0 Comments

在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日
0
0 Comments

试试这个:


0
0 Comments

你应该能够像使用模型属性的任何其他输出一样在视图中使用它。只需引用要传递给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

0