gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:42:58 24 4
gpt4 key购买 nike

我有 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();

}

现在在我的 Controller 操作中

 public class mycontroller : controller
{
public ActionResult WhatToDo()
{
options obj = new options{Url="someurl"};
return PartialView(obj);
}


}

在我看来,我需要这种对象类型的字符串,我应该能够将其传递给我的方法。

@model options

<script>
dosomething(@model.SomeFunctionToConverToString())

</script>

所以我需要这个 SomeFunctionToConverToString 方法,我将这个对象转换为字符串。

谢谢

最佳答案

您应该能够像使用 View 中模型属性的任何其他输出一样使用它。只需在 JS 函数中引用您要传递的属性即可。

@model options

<script>
dosomething('@(model.Url)');
</script>

参见this post有关在 JS 中使用 Razor 的更多信息

编辑 - 可能会引起您注意的是,如果您的 URL 因 Razor 使用上述内容进行的 HTML 编码而被破坏,您可以使用 @Html.Raw() 函数将传递 Url 属性,而不对其进行 HTML 编码。

<script>
dosomething('@Html.Raw(model.Url)');
</script>

编辑 2 - 和 another SO post来救援!您很可能希望将模型转换为 JSON,以便在 Javascript 函数中使用。所以...为了做到这一点 - 您将需要 View 模型中的某些内容来处理 JSON 对象。

public class optionsViewModel
{
public options Options{get;set;}
public string JsonData{get;set;}
}

在你的 Controller 中:

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);
}
}

最后是 View :

@model optionsViewModel

<script>
dosomething('@model.JsonData')

</script>

使用此方法,您的函数将按预期工作:

function dosomething(obj)
{
if (obj.Url!="" and obj.HttpMethod=="something")
loadsomething();
}

编辑 3 可能是最简单的方法?与编辑 2 相同的前提,但是这是使用 View 对模型进行 JsonEncode。对于是否应该在 View 、 Controller 或存储库/服务层中完成此操作,双方可能都有一些很好的争论。但是,为了在 View 中进行转换...

@model options

<script>
dosomething('@Html.Raw(Json.Encode(Model))');
</script>

关于javascript - Asp.net mvc 将 C# 对象传递给 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8145716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com