在MVC中将数据从视图传递到局部视图

时间:2016-03-11 05:13:41

标签: c# model-view-controller

我想从View向Partial View发送3个参数,我将部分视图打开到新的浏览器选项卡。

参数是

var Hdata = 'some value'; 
var abc = document.getElementById('mycontrol1');
var abcd = document.getElementById('mycontrol2');

这三个参数我想将它发送到部分视图。 代码就像

window.open('@Url.Action("Action", "Controller")', '_blank');

那么如何将数据传递给部分视图。

先谢谢。

2 个答案:

答案 0 :(得分:0)

最简单的方法是在查询字符串中。像。的东西。

window.open('@Url.Action("Action", "Controller", new { data1 = Model.Data1 })', '_blank');

然后您将数据传递到新窗口。但是现在您已将数据暴露给URL并且处理复杂类型可能会变得困难。如果可能,最好将标识符传递给您的操作,以便重建您希望在窗口中显示的模型。

window.open('@Url.Action("Action", "Controller", new { id = Model.Id })', '_blank');

答案 1 :(得分:0)

从我的问题和所提供的代码中可以理解,您正在从DOM元素中提取一些值,然后尝试在新选项卡中查看视图。现在,您希望DOM元素的这些数据也可以在新视图中使用。如果这种理解是正确的,那么你可以这样做。

你已经有了这个。

var Hdata = 'some value'; 
var abc = document.getElementById('mycontrol1');
var abcd = document.getElementById('mycontrol2');
现在拥有这些值你只需要点击一个控制器来渲染视图。因此,您可以通过构造查询字符串将这些值传递给控制器​​。

var URL = '@Url.Action("Action", "Controller")' + '?Hdata=' +Hdata + '&abc='+abc +'&abcd='+abcd;
window.open(URL , '_blank');

你的控制器也必须如此。

 public ActionResult YourControllerName(string Hdata,string abc, string abcd)
 {
    ViewBag.Hdata = Hdata;
    ViewBag.abc = abc;
    ViewBag.abcd= abcd;

    return PartialView();
 }

现在,您将通过ViewBag在部分视图中获得数据。

或者更简洁的方法是让模型接收并传递数据。

 public class YourModel
 {
  public string Hdata {get;set;}
  public string abc {get;set;}
  public string abcd {get;set;}
 }

然后控制器将

 public ActionResult YourControllerName(YourModel pageData)
  {
    return PartialView(pageData); //this requires your view to use model of type YourModel
   // OR
   // ViewBag.PageData = pageData;
   // return PartialView();
  }