2016-01-23 55 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。