2016-03-11 140 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(); 
    } 
相關問題