簡體   English   中英

asp.net mvc-返回視圖后重寫Url

[英]asp.net mvc - Rewrite Url after return view

我有這樣的問題。 在RouteConfig.cs中,我設置了路由

routes.MapRoute(
      "NewsDetails",
      "news/details-news/{title}-{id}",
      new { controller = "News", action = "Details", id = "", title = "" }
);

在我的NewsController的Index.cshtml中,我有一個鏈接

@Html.RouteLink(item.Title, "NewsDetails", new { 
         title = MyWeb.Classes.PrettyUrlHelper.PrettyUrl(item.Title), 
         id = item.Id 
})

在我的NewsController中:

public ActionResult Details(string title,String id)
{
    if (id == null && title == null)
       return RedirectToAction("Index");


     try
     {
        int ID = Int32.Parse(id);

        var result = NewsConnectionDB.GetInstance().Single<LifeStory>(ID);

        return View(result);
      }

      catch (InvalidOperationException) { 
          return  View("~/Views/Error/Error404.cshtml"); 
      }
      catch (FormatException) { 
          return View("~/Views/Error/Error404.cshtml"); }
 }

因此,如果用戶單擊“視圖”中的鏈接,則該鏈接將轉至要處理的操作“詳細信息”,並且該鏈接是Seo Url友好的(localhost:9224 / news / details-news / ten-things-2)。 但是用戶鍵入鏈接而不是單擊“視圖”中的鏈接:

  localhost:9224/news/details-news/ten-thingsblahblahblah-2

上面的網址使用ID正確,但標題不正確。 因此,如果用戶鍵入了錯誤的標題但輸入了正確的ID,如何在返回View后更新URL?

任何幫助,將不勝感激。

P / S:我的英語不好,所以我希望你能理解。

如果標題不正確,則可以在響應標題中發送正確的url。 如果是ajax調用,則在完成時檢查響應頭中的URL是否正確。 如果存在正確的網址,請使用window.history.pushState javascript方法更改瀏覽器的網址。

在“ 詳細信息”操作方法中,使用以下代碼設置響應頭。

HttpContext.Current.Response.AppendHeader("CorrectUrl", "YourUrl");

使用HttpServerUtility.UrlEncode(string);

javascript代碼可以替換url,我認為它會起作用:)。

C#代碼

string _entitle = HttpServerUtility.UrlEncode(_strTitle);
string _strCorUrl = "http://example.com/"+ _entitle + "-" + _intID.toString();

腳本代碼

top.window.location.replace('CorrectUrl');

或C#代碼重定向網址

Response.Redirect(url);

使用Context.RewritePath 更新可能的1解決方案

https://msdn.microsoft.com/zh-CN/library/sa5wkk6d(v=vs.110).aspx

void Application_BeginRequest(Object sender, EventArgs e)
{
    string originalPath = HttpContext.Current.Request.Path.ToLower();
    if (originalPath.Contains("/page1"))
    {
        Context.RewritePath(originalPath.Replace("/page1", "/RewritePath.aspx?page=page1"));
    }
    if (originalPath.Contains("/page2"))
    {
        Context.RewritePath(originalPath.Replace("/page2", "/RewritePath.aspx"), "pathinfo", "page=page2");
    }
}  

它是示例代碼,可以使用,希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM