2016-01-23 59 views
0

我無法在視圖中共享部分視圖的值。部分視圖中的Asp.net份額值

我的主視圖:

<ul class="nav nav-tabs" style="margin-bottom: 5%;"> 
    <li id="first" role="presentation" class="active"><a>Anschrift</a></li> 
    <li id="second" role="presentation"><a>Kunden Daten</a></li> 
    <li id="third" role="presentation"><a>Preis/Zahlung</a></li> 
</ul> 

@model CustomerViewModel 
<div id="inhalt"> 
    @Html.Partial("_General", Model) 
</div> 

我查看腳本:

$("#first").click(function() { 
    $("#inhalt").load('@Url.Action("General", "Home")'); 
}); 

$("#second").click(function() { 
    $("#inhalt").load('@Url.Action("Data", "Home")'); 
}); 

#first#second是按鈕。

所有視圖嵌套在控制器中,我的目標是在整個局部視圖中共享模型。

我的控制器:

public ActionResult Customer() 
{ 
    return View(); 
} 

public ActionResult General(CustomerViewModel model) 
{ 
    return PartialView("~/Views/Home/_General.cshtml"); 
} 

public ActionResult Data(CustomerViewModel model) 
{ 
    return PartialView("~/Views/Home/_Data.cshtml"); 
} 

顧客是將局部視圖越來越呈現的主視圖。

從我的局部視圖的代碼段:

@model CustomerViewModel 
<h1>General Partial View</h1> 
@Html.TextBoxFor(model => model.Name1, new { @class = "text", placeholder = "Name 1", id = "Name1" }) 

編輯

我嘗試下面的代碼,以便分享不同的觀點型號:

$("#inhalt").load('@Url.Action("Data", "Home", model)'); 

但這似乎並不奏效,因爲當我調試控制器時,模型中的所有內容都是空的。

說明:

我按具有ID列表元素(#first, #second ..)。我想用我的部分視圖替換id爲#inhalt的div。爲了做到這一點,我正在使用javascript來替換部分,這一切工作正常。但我無法將我的模型傳遞給觀點。我如何實現這一目標?

+0

那麼具體的問題或問題是什麼? *「我有麻煩」*是一個毫無價值的問題描述 – charlietfl

+0

我試過以下代碼:$(「#inhalt」)。load('@ Url.Action(「Data」,「Home」,Model)');爲了通過模型,但這並沒有工作,模型仍然是空的... – Anokrize

+0

在你提供的代碼中,你沒有設置一個'model' - 所以當你傳回它時,它當然是空的。你需要在你的主頁/視圖('Customer()'?)中加載你的模型。請記住,如果你使用'$().load(「@ Url.Action ...'那麼'model'將被傳遞給url,如果你有一個大型模型,你可能會遇到URL長度問題。問題:你有沒有使用'@ Html.Partial'的原因? '$ .load'會加載異步,這可能是你之後的情況,但是如果數據已經加載,那麼就不會添加任何內容,因爲它只是可能是最小部分的異步渲染。 –

回答

1

由於您在路由(URI)上傳遞模型,因此您需要在此處使用路由值。

<img src="@Url.Action("DisplayData", "Home", Model.RouteValues)" alt="Image" /> 

正如在Binding the Model variable to an Action Method in ASP.NET MVC3

 
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; 
     } 
    } 
} 

顯示或使用路由值

<img src="@Url.Action("DisplayData", "Home", new RouteValueDictionary(Model)" alt="Image" /> 

請記住,因爲你使用的網址,您可以跨長度的限制運行直接調用並且整個模型可能不適合,在這種情況下,您需要通過POST加載而不是GET。