强类型的局部视图导航

时间:2010-12-19 23:40:45

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

基本上,我开始研究这个应用程序,对Web开发一无所知,这严重阻碍了我的搜索功能。可能应该读一本书,但这不太可能。使用ASP.NET MVC3 RC2,我正在尝试创建一个强类型的局部视图,它可以导航到相关项目,以及维护面包屑路径(我认为它是ViewBag中的List?)。一个很好的比喻是带有同义词子视图的字典页面。

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

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

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

我无法拼凑拼图的所有部分。样本或大纲会很棒。

谢谢!

1 个答案:

答案 0 :(得分:1)

伙计,我知道在问之前我应该​​再花一点时间了。

所以,这是食谱:

  1. 在控制器中创建一个函数Synonym(id) { return PartialView(GetEntry(id)); }
  2. 制作部分视图,Synonym.cshtml,强类型为Entry。
  3. 使用<div id="Synonyms">@{Html.RenderAction("Synonym", @Model.Id);}</div>
  4. 在主展示中显示部分视图
  5. 对于Synonym.cshtml中的ajax导航链接,请使用类似

    的内容
    @foreach(Entry syn in @Model.Synonyms)
        @Ajax.ActionLink((string)@syn.Name, "Synonym", 
            new { id = @syn.Id }, new AjaxOptions { UpdateTargetId = "Synonyms" })
    
  6. 有一件事让我失望的是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. 中创建了反向链接
    5. 修改了对@Html.RenderAction的调用,以传递ActionLinks new { id = @Model.Id, orig = @Model.Id }
    6. 中的对象

      如果其他人提出了一个更好的答案,让我想重写我的东西,我会接受他们的。而且我喜欢关于我是否遗漏任何内容的反馈,比如我如何避免Controller.Synonym的第二个参数或其他简化或改进。