【问题标题】:Strongly typed partial view navigation强类型局部视图导航
【发布时间】:2010-12-20 22:45:15
【问题描述】:

基本上,我开始开发这个应用程序时,我对 Web 开发一无所知,这严重抑制了我的搜索能力。可能应该读一本书,但这不太可能。使用 ASP.NET MVC3 RC2,我正在尝试制作一个强类型的局部视图,它可以导航到相关项目,并维护一个面包屑轨迹(我认为这将是 ViewBag 中的一个列表?)。一个很好的类比是带有同义词库子视图的字典页面。

class Entry
{
   string Name;
   string Definition;
   IEnumerable<Entry> Synonyms;
}

页面主要显示单词及其定义等。但是有一个带有同义词的 div,您可以单击查看所选单词的同义词,用 ajax 替换。

我最初认为我需要做一个 html 助手,但后来我看到有关从我的控制器返回 PartialView 的东西,这似乎好多了。

我无法将所有拼图拼凑在一起。一个样本或大纲会很棒。

谢谢!

【问题讨论】:

    标签: ajax asp.net-mvc-3 partial-views


    【解决方案1】:

    伙计,我知道在问之前我应该​​再研究一下。

    所以,这是食谱:

    1. 在控制器中创建一个函数,Synonym(id) { return PartialView(GetEntry(id)); }
    2. 制作部分视图 Synonym.cshtml,对 Entry 进行强类型化。
    3. 使用&lt;div id="Synonyms"&gt;@{Html.RenderAction("Synonym", @Model.Id);}&lt;/div&gt;在主显示器中显示部分视图
    4. 对于 Synonym.cshtml 中的 ajax 导航链接,使用类似这样的东西

      @foreach(Entry syn in @Model.Synonyms)
          @Ajax.ActionLink((string)@syn.Name, "Synonym", 
              new { id = @syn.Id }, new AjaxOptions { UpdateTargetId = "Synonyms" })
      

    一件事让我很困惑是new { id = @syn.Id },因为我的控制器中的参数名称实际上是数字,我不得不使用new { number = ... }

    哦,我问的是导航。我认为浏览器的后退按钮对于大多数导航来说已经足够了,但仍然需要一个“返回当前单词”链接。为此,我做了以下工作:

    1. 修改 Controller.Synonym 以获取另一个参数 int orig 并在返回前设置 ViewBag.OrigId = orig;
    2. 将 ActionLinks 修改为 new { id = @syn.Id, orig = @ViewBag.OrigId }
    3. 在 Synonym.cshtml 中创建了反向链接 - @Ajax.ActionLink("Back To Current Word", "Synonym", new { id = @ViewBag.OrigId, orig = @ViewBag.OrigId }, new AjaxOptions { UpdateTargetId = "Synonyms" })
    4. 修改了对@Html.RenderAction 的调用以传递一个对象,如ActionLinks new { id = @Model.Id, orig = @Model.Id }

    如果其他人提出了一个更好的答案,让我想重写我的东西,我会接受他们的。我很想就我是否遗漏任何东西提供反馈,例如如何避免 Controller.Synonym 的第二个参数或其他简化或改进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      相关资源
      最近更新 更多