2

私が欲しいものを非常に簡単に説明しましょう: 私は という名前のモデルを持っています.私Sectionのセクションモデルには という名前のプロパティがありますUrlSafe.私は今URLに私のurlsafesを示しています.それは私のURLがこのようなものであることを意味します:

www.test.com/section/show/(the section's urlsafe goes here)

しかし、私が今やりたいsection/showのは、URLから削除することです。次のようにしたいです:

www.test.com/(my section's urlsafe)

詳細情報:

1- MVC3 で作業しています

2-私のモデルは次のようなものです:

public class Section
{
    public int SectionId { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
    public string MetaTag { get; set; }
    public string MetaDescription { get; set; }
    public string UrlSafe { get; set; }
    public string Header { get; set; }
    public string ImageName { get; set; }
}

3-私のリンクは次のようなものです:

<a href="@Url.Action("Show", "Section", new { sectionUrl = sectionItem.UrlSafe }, null)">@sectionItem.Name</a>

4-私のコントローラーは次のようなものです:

public ActionResult Show(string sectionUrl)
{
    var section = sectionApp.GetSectionBySectionUrl(sectionUrl);
    return View(section);
}

5- 最後に、Global.asax に次の行があります。

routes.MapRoute(
    name: "Section",
    url: "{controller}/show/{sectionUrl}",
    defaults: new { controller = "Section", action = "Show", sectionUrl = UrlParameter.Optional }
);
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{name}",
    defaults: new { controller = "Home", action = "Index", name = UrlParameter.Optional }
);

あなたの解決策は何ですか?

ありがとう。

4

2 に答える 2

1

これを試しましたか?

routes.MapRoute(
    name: "Section",
    url: "{sectionUrl}",
    defaults: new { controller = "Section", action = "Show", sectionUrl =     UrlParameter.Optional }
);

@Levi Botelhoのコメントに完全に同意

于 2013-06-11T08:09:57.553 に答える
1

原則として、これを変更するだけです:

routes.MapRoute(
    name: "Section",
    url: "{controller}/show/{sectionUrl}",
    defaults: new { controller = "Section", action = "Show", sectionUrl =
        UrlParameter.Optional }
);

これに:

routes.MapRoute(
    name: "Section",
    url: "{sectionUrl}",
    defaults: new { controller = "Section", action = "Show" }
);

sectionurlコンポーネントからデフォルト値を削除したことに注意してください。これは重要sectionurlです。if がオプションの場合、test.com にアクセスすると Section/Show に誘導されます。これは、パラメーターのない URL がそのルートに一致するためです。このパラメーターを必須にすることは、単一のセグメントを持つ URL のみがこのパターンに一致することを意味します。これでも問題が発生する可能性がありますが、少なくとも test.com にアクセスすると、ホームページにアクセスできます。

免責事項

ルーティングをいじると、アプリケーションの残りの部分がどのように機能するかに深刻な影響を与える可能性があります。特に、既存のページへのナビゲーションが著しく損なわれる可能性があります。

自分が行っていることをもう一度見て、望ましい結果を達成するためのより良い方法がないかどうかを確認することを強くお勧めします。コンテキストを知らずに、URL をモデル パラメーターに保存することは、あまり良い考えではないように思われます。

于 2013-06-11T08:10:31.637 に答える