2014-09-03 50 views
1

我使用AJAX將div的內容發佈到我的C#mvc控制器。 阿賈克斯後看起來是這樣的:AJAX「發佈」發佈html元素時的問題

$.ajax({ 
    url: '/Home/SaveContent', 
    type: 'POST', 
    data: { 
     model: modelDataJson, 
     activeId: activeId, 
     contentToUpdate: $("div#" + activeId).html() 
    }, 
    dataType: 'json', 
    success: function (data) { 
     alert("Content hits controller. Id: " + activeId); 
    }, 
    error: function() { 
     alert("error"); 
    } 
}); 

我使用的是所見即所得的編輯器是一個id一個div:activeId。 所以我想要發佈是這一行:contentToUpdate: $("div#" + activeId).html() 這低於這個div:

<div id="WelcomeText" data-photo="15" class="click2edit" style="display: block;"> 
    som content here 
</div> 

如果我發佈此上面我的C#-controller法被擊中,一切工作。

但如果我張貼此以下時,error: function() { alert("error");}被擊中:

<div id="WelcomeText" data-photo="15" class="click2edit" style="display: block;"> 
    <p>som content here</p> 
</div> 

所以我的問題是:爲什麼不包括當沒有崗位工作HTML?我錯過了什麼,好像contentToUpdate: $("div#" + activeId).html()不包括子元素?

+0

ASP.NET在某一時刻擁有一個反XSS過濾器,可阻止包含看起來像HTML的東西的請求。你沒有遇到過這樣的事情,是嗎? – 2014-09-03 20:46:00

回答

2

默認情況下,MVC會在綁定模型時拒絕包含HTML的發佈值,因爲該模型有潛在危險。在您的第一篇文章的價值是

som content here 

但在第二個它的

<p>som content here</p> 

第二個被檢測爲HTML和拒絕。

要允許HTML內容,您可以將[AllowHtml]屬性添加到模型中的相關屬性。

例如:在AllowHtml屬性

public class MyModel 
{ 
    [AllowHtml] 
    public string HtmlContent { get; set; } 
} 

更多信息可以在MSDN找到。

編輯

基於來自評論如下:

我控制器後的方法是這樣的public void SaveContent(string model, string activeId, string contentToUpdate){}

如果是這樣的話,那麼上述韓元」因爲您沒有適用[AllowHtml]屬性的模型。

你有兩個選擇: 首先,你可以創建一個模型和屬性添加到,然後改變你的操作方法,採取新模式:

public class SomeModel 
{ 
    public string Model {get; set;} 
    public string ActiveId {get; set;} 
    [AllowHtml] 
    public string ContentToUpdate {get; set;} 
} 

public void SaveContent(SomeModel model) 
{ 
    //access model.Model, model.ActiveId and model.ContentToUpdate here 
} 

另外,您可以繼續操作方法原樣,並與[ValidateInput(false)]屬性裝飾作用方法:

[ValidateInput(false)] 
public void SaveContent(string model, string activeId, string contentToUpdate) 
{ 
    //do stuff here 
} 

這上參數的所有將防止驗證被髮送到該行爲離子方法,所以你應該自己驗證modelactiveId

+0

感謝您的回答。我試圖在我的財產[AllowHtml],但我的saveFile按鈕女巫觸發阿賈克斯停止工作。可能是什麼問題? – user3228992 2014-09-03 20:56:26

+0

@ user3228992 - 您正在使用哪個版本的MVC?另外,您是否接受控制器方法上的FormCollection? – petelids 2014-09-03 21:00:50

+0

我正在使用MVC「5.1」。爲什麼我需要FormCollection?我的controller-post-method看起來像這樣:public void SaveContent(string model,string activeId,string contentToUpdate){}'。謝謝 – user3228992 2014-09-03 21:06:24