2017-06-14 63 views
1

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

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

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

public ActionResult ExportDataExtReport(DataExtractionReportModel DataExtReportModel) 

呼叫到达控制器通过该对象为null

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; 
+0

你做了一个GET。您需要传递每个单独的名称/值对作为查询字符串或路由值 –

+0

如果是Ajax调用并返回View,通常我会使用JSON.stringify(ReportModel [0])。但在这种情况下,我必须使用window.location。因为我需要生成一个Excel文件。除了传递每个名称​​/值对之外,还有其他方式,因为我的模型可以有更多的属性。 –

+0

您可以使用'$ .param()'方法来简化它。但它不清楚为什么你生成一个对象,然后将它推入一个数组 - 它只是从这些值中生成查询字符串的代码少。而且你还没有显示出所有的属性值('OperationalUnits'建议一个集合,因此不会像你已经显示的那样工作) –

回答

0

ASP.NET MVC是相当强大的理解JSON数据对象。

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

时我已经在客户端代码中的JSON数据对象,提交到一个新的控制器之前,我店它在一个隐藏的输入中被串联起来。

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

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

希望这有助于

+0

OP正在做一个GET,而不是一个POST。 –

+0

我没有用POST试过,但理论上它应该工作。 – Bardo

+0

什么?同样,问题是关于使用'location.href'进行GET - 表单和隐藏输入不适用。这与这个问题无关。 –

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

+0

我非常怀疑OP是否希望将模型的原始值发送回服务器(会有点毫无意义) –