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

9
我希望能够从视图传递3个参数到局部视图,并且将局部视图打开到新的浏览器选项卡中。
这些参数是:
var Hdata = 'some value'; 
var abc = document.getElementById('mycontrol1');
var abcd = document.getElementById('mycontrol2');

这三个参数我想要发送到Partial视图中。代码如下:
window.open('@Url.Action("Action", "Controller")', '_blank');

我该如何将数据传递给局部视图呢?谢谢!

Related: - StuartLC
2个回答

1
根据您的问题和提供的代码,我理解您正在从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();
  }

0

最简单的方法是在查询字符串中。类似于:

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

那么你正在向新窗口传递数据。但是现在你已经将数据暴露在URL中,处理复杂类型可能会变得困难。如果可能的话,最好传递一个标识符到你的操作,让你重新构建你想要在窗口中显示的模型。

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

当我使用它时,出现了以下错误。 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException 类型的异常在 System.Core.dll 中发生,但未在用户代码中处理。 - Prasad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接