MVC部分视图,GET和路由

时间:2013-10-25 10:16:56

标签: c# asp.net-mvc asp.net-mvc-routing

美好的一天, 这是我的第一个问题,所以请善待。我刚从表格搬到了mvc。 我已经做了以下路线(下面)。我构建了一个局部视图,其中还包含2个其他部分视图(如下所示)。 提交时,网址将是'查找/索引?区域= 3&兴趣= 1'

  1. 创建与定义的路线匹配的友好网址的最佳方法是什么 的 '查找/索引/在威尔士-3 /运动-1'?我可以发布然后重定向,但我认为这可能效率低下。一个更好的方法可能是使用jquery?

  2. 还请说明所使用的设计是否正确或是否可以改进?分离视图的原因是因为它们用于多个视图。

  3. 提前致谢!

    路线配置

    routes.MapRoute(
    name: "Find",
    url: "{controller}/{action}/In-{region}-{rid}/{interest}-{iid}",
    defaults: new { controller = "Find", action = "Index", region = UrlParameter.Optional,
                                rid = UrlParameter.Optional,
                                interest = UrlParameter.Optional,
                                iid = UrlParameter.Optional
                });
    

    在母版页上呈现的部分视图

    @model SimpleFriendFinderModel
        <h1>Find</h1>
        <div>
            @using (Html.BeginForm("Index", "Find", FormMethod.Get))
            {
                @Html.Partial("_RegionDropDown", @Model.Regions)
                @Html.Partial("_InterestDropDown", @Model.Interests)
                <div>
                    &nbsp;
                    <button>SEARCH</button>
                </div>
            }
        </div>
    

    区域部分视图

    @model IEnumerable<Region>
    
    <select id="Region" name="Region">
    <option>REGION</option>
        @{ foreach(var item in Model) {
            <option value="@item.RegionID">@item.RegionName</option>
        }
    }
    </select>
    

    另一个局部视图是Region的副本,但显然是一个不同的模型。

1 个答案:

答案 0 :(得分:2)

对于PartialViews;如果你在其他页面上重复使用它,那就是你要走的路。您可以将其视为“封装逻辑”。

更新:如果您只是使用下拉列表的部分视图,请忽略上述内容。有一个HtmlHelper,Html.DropDownListFor()

第一部分;订单是相关的:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
          name: "Pretty",
          url: "{controller}/{action}-{id}/Something",
          defaults: new { controller = "Test", action = "Foo", id = UrlParameter.Optional }
      );

//default route
routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",  
          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional    }
        );
例如,如果您想格式化URL,那么

将起作用:

http://local:23802/Test/Foo-5/Something