2012-08-15 41 views
15

我有一個URL,我想在Razor視圖中將其作爲原始標記呈現。我原以爲Html.Raw會是這樣的:爲什麼Html.Raw會在ASP.NET MVC 4中的錨標記中轉義&符號?

@{ 
    string test = "http://someurl.com/someimage.png?a=1234&b=5678"; 
} 

<div> 
    <a href="@Html.Raw(test)">Test</a> 
</div> 

但是這不起作用。該符號被編碼和HTML呈現爲:

<div> 
    <a href="http://someurl.com/someimage.png?a=1234&amp;b=5678">Test</a> 
</div> 

奇怪的是,如果我做Html.Raw呼叫錨標記之外,如預期的HTML輸出:

<div> 
    @Html.Raw(test) 
<div> 

被渲染爲:

<div> 
    http://someurl.com/someimage.png?a=1234&b=5678 
</div> 

任何人都可以解釋爲什麼這是?

編輯:

嘗試了一些其他的東西出來,發現預期了以下工作:

<div data-url="@Html.Raw(test)"></div> 

輸出:

<div data-url="http://someurl.com/someimage.png?a=1234&b=5678"></div> 

要添加多一點背景下,我的目標實際上並不是使用錨定標記中的URL,因爲href s可以是HTML編碼並仍然有效(我只是使用了一個chor標記案例爲例)。相反,我希望使用Flash對象的<object> <param>值標記中的URL。 Flash對象不能正確識別HTML編碼的URL,但我無法正確輸出原始URL。

我不知所措。時間打出來的MVC源代碼,我猜...

+0

可能重複http://stackoverflow.com/questions/12321616/why-is-mvc-4-razor-當使用html-raw-in-a-title-attribute)時,轉義字符-anpersand- – 2015-03-27 15:04:45

回答

11

這是因爲在管道中的東西(我猜想剃刀,但我需要查找它)屬性編碼所有...屬性val UE的。這不應該影響瀏覽器到達您想要的位置。

您可以使用@Html.ActionLink(text, action, routeAttributes)過載對此進行測試。

@Html.ActionLink("Test", "Index", new { tony = "1", raul = 2 }) 

輸出

<a href="/?tony=1&amp;raul=2">Test</a> 

在問候你的編輯,你只需要讓你的原始值的整個<param>部分。

@{ 
    var test = "<param src=\"http://someurl.com/someimage.png?a=1234&b=5678\">"; 
} 

<div> 
    <object> 
    @Html.Raw(test) 
    </object> 
</div> 
+0

這個答案是最新的嗎?我只是在VS2013,MVC5和'Test'輸出'@ Html.ActionLink(「Test」,「Index」,new {tony =「1」,raul = 2})'... – 2015-11-11 00:23:23

3

嘗試

<div> 
    <a href="@MvcHtmlString.Create(test)">Test</a> 
</div> 
+0

沒有運氣。我得到和Html.Raw()一樣的行爲。 – 2012-08-15 02:54:27

+0

@JoeWaller起初我沒有爲我工作,但當我更新Razor和MVC到最新版本(這是一個痛苦,因爲它打破了事情...),然後Html.Raw()和MvcHtmlString.Create()確實工作。 – bets 2017-05-24 12:26:48

0

你爲什麼不使用jQuery文章的網址:

$(function() { 
    $('form').submit(function() { 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: { a:'firstvalue', b: 'secondvalue'}, 
      success: function (result) { 
//code for successful result 
      } 
     }); 
     return false; 
    }); 
}); 

在控制器

public ActionResult Fetch(string a, string b) 
    { 
     //write required codes here 
      return View(); 

    } 
4

像這樣:

@{ 
    string test = "http://someurl.com/someimage.png?a=1234&b=5678"; 
} 

<div> 
    <a href="@Html.Raw(Html.AttributeEncode(test))">Test</a> 
</div> 

產生有效的標記:

<div> 
    <a href="http://someurl.com/someimage.png?a=1234&amp;b=5678">Test</a> 
</div> 

但是,這是行不通的。 「&」字符被編碼,HTML爲 呈現爲:

但這正是一個有效的標記應該是什麼樣子。用作屬性時,必須對&符號進行編碼。別擔心,瀏覽器會很好地理解這個網址。

注意,以下是無效的標記,所以你不想這樣的:

<div> 
    <a href="http://someurl.com/someimage.png?a=1234&b=5678">Test</a> 
</div> 
+0

這個例子是誤導,他正在嘗試使用''設置閃存對象,並且他認爲它沒有正確拾取值(可能是閃存中的一次雙重編碼?) – 2012-08-15 17:33:51

+0

@NickLarsen,但以下是**無效標記* *:''。嘗試任何HTML驗證器,它會告訴你這一點。爲什麼有人想要產生無效的標記?如果Flash電影不理解有效標記,則可能需要修復此Flash動畫。 – 2012-08-15 17:50:05

+0

這是一個很好的觀點,除非他無法更改閃存部分。 – 2012-08-15 17:59:49

1

只是嘗試以下... 它可以完美運行。

@{ 
    string test = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token="[email protected]; 
} 
<div> 
    <a href="@Html.Raw(System.Web.HttpUtility.HtmlDecode(test))">@Html.Raw(System.Web.HttpUtility.HtmlDecode(test))</a> 
</div> 
的[爲什麼在標題屬性使用時HTML.Raw MVC 4剃刀逸出符號(
相關問題