2016-03-11 139 views
4

我想从视图发送3个参数到局部视图,我打开局部视图到新的浏览器选项卡。在MVC中将数据从视图传递到局部视图

参数是

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

这3个参数我想将它发送到局部视图。 该代码是像

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

那么,如何可以将数据传递给局部视图。

在此先感谢。

回答

0

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

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

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

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

当我用这个我收到以下错误。 '在System.Core.dll中发生类型'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'的异常,但未在用户代码中处理' – Prasad

9

如果你只是渲染的部分只有部分名称:

@Html.Partial("_SomePartial") 

它实际上会通过你的模型作为隐含参数,一样的,如果你要拨打:

@Html.Partial("_SomePartial", Model) 

现在,为了您的偏好实际上能够使用这个,但它也需要有一个定义的模型,例如:

@model Namespace.To.Your.Model 

@Html.Action("MemberProfile", "Member", new { id = Model.Id }) 

或者,如果你处理的,这不是在您的视图模型的值(它在ViewBag或视图本身以某种方式生成的值,那么你可以传递一个的ViewDataDictionary

@Html.Partial("_SomePartial", new ViewDataDictionary { { "id", someInteger } }); 

而且然后:

@Html.Action("MemberProfile", "Member", new { id = ViewData["id"] }) 

与模型,剃刀将隐含在默认情况下通过你的局部视图的ViewData的,所以如果你在你看来有ViewBag.Id,那么你可以参考你的部分同样的事情。

请在下面找到

@{ 
    ViewBag.Title = "Index"; 
    string someValue ="abcd"; 
} 

的示例代码现在通过这样的

<h2>Index</h2> 
@Html.Partial("_MyPartial", someValue) 

字符串值有在局部视图消耗你的传递数据的方式没有变化。就部分视图而言,它正在接收可通过@Model访问的数据。

Data received is : @Model 
+0

我没有Model。我有一个字符串。那串我需要通过。 – Prasad

+0

您可以将该字符串放入视图包中,并将该字符串通过视图包传递。 – BSG

+0

你能不能给我示例代码 – Prasad

0

从我可以从你的问题和提供的代码明白的是,你从DOM元素上的一些事件提取一些值,然后试图oepn在新标签中的视图。现在,您希望这些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(); 
    } 
相关问题