如何在@ Html.Raw(@ Url.Action())中传递Javascript List对象?

时间:2017-06-14 12:11:13

标签: javascript html asp.net-mvc asp.net-mvc-4 razor

如何在@ Html.Raw(@ Url.Action())中传递Javascript列表对象?

我的控制器中有一个Model,它具有以下属性作为js List对象。

我的控制器中的方法需要此模型。

   public ActionResult ExportDataExtReport( DataExtractionReportModel DataExtReportModel)  

调用通过对象到达控制器为空

    ReportModel.push({
        ReportId : ReportSelID,
        ReportName : "DataExtraction",
        StartDate : DEYearSelID,
        CategoryId : DataExtCategoryId,
        SurveyId : QuestionnaireSelID,
        SurveyName: QuestionaireName,
        OperationalUnits : DataExtOpUnit
    });

   var link = '@Html.Raw(@Url.Action("ExportDataExtReport", "Location", new { DataExtReportModel = -1}))';
    link = link.replace("-1", ,ReportModel[0]);
    window.location.href = link;

2 个答案:

答案 0 :(得分:0)

ASP.NET MVC非常强大,可以理解JSON数据对象。

我不知道这是不是最好的做法,但我会告诉你我是如何管理的:

当我在客户端代码上有一个JSON数据对象时,在提交给新控制器之前,我将其存储在一个隐藏的输入中。

然后我提交表单(哪个动作是控制器方法调用)。现在,我的控制器接收一个表单对象,但它们的一个参数是一个字符串化的JSON对象。

我通常有一个商业模型类,其数据结构与到达控制器的JSON数据包的数据结构兼容。使用JSON序列化程序并将结果转换为该模型类类型会使您的包日期加载到业务模型类的实例中。

希望这有帮助

答案 1 :(得分:0)

根据你的评论:

除了传递每个名称​​/值对之外还有其他方法,因为我的模型可以有更多属性

是的,有一种方法,就是说,您只需将 RouteValueDictionary 属性添加到现有模型中,然后发送如下所示的值:

相关示例:

public class MyViewModel
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public bool IsPeriod { get; set; }

    public RouteValueDictionary RouteValues
    {
        get
        {
            var rvd = new RouteValueDictionary();
            rvd["name"] = Name;
            rvd["surname"] = Surname;
            rvd["isPeriod"] = IsPeriod;
            return rvd;
        }
    }
}

然后,您只需在Url.Action()调用中使用RouteValues属性。

<img src="@Url.Action("DisplayData", "Home", Model.RouteValues)" alt="Image" />

或者,如果您更喜欢较少(显式)代码,请忽略模型更改并执行此操作:

<img src="@Url.Action("DisplayData", "Home", new RouteValueDictionary(Model)" alt="Image" />

来源:https://stackoverflow.com/a/13088972/3397630

希望它有用

由于

KARTHIK