我真的不推薦這種方法 - 如果您想確保調用成功,請使用協議中和jQuery庫中內置的HTTPHeader。如果你看看$.ajax
的API文檔,你會發現你可以對不同的HTTP狀態代碼有不同的反應 - 例如,成功和錯誤回調。 用這種方法,你的代碼將看起來像
$.ajax({
url: $(this).attr('action'),
type: 'POST',
data: $(this).serialize(),
dataType: 'HTML',
success: function(data, textStatus, XMLHttpRequest) {
alert(textStatus);
$('#test').html(data);
},
error: function(XmlHttpRequest, textStatus, errorThrown) {
// Do whatever error handling you want here.
// If you don't want any, the error parameter
//(and all others) are optional
}
}
而且操作方法簡單地返回PartialView
:
public ActionResult ThisOrThat()
{
return PartialView("ThisOrThat");
}
但是,是的,這是可以做到的方式太。您的方法存在的問題是您要返回PartialView
本身,而不是輸出HTML。如果你把它改成這樣您的代碼將工作:
public ActionResult HelpSO()
{
// Get the IView of the PartialView object.
var view = PartialView("ThisOrThat").View;
// Initialize a StringWriter for rendering the output.
var writer = new StringWriter();
// Do the actual rendering.
view.Render(ControllerContext.ParentActionViewContext, writer);
// The output is now rendered to the StringWriter, and we can access it
// as a normal string object via writer.ToString().
// Note that I'm using the method Json(), rather than new JsonResult().
// I'm not sure it matters (they should do the same thing) but it's the
// recommended way to return Json.
return Json(new { success = true, Data = writer.ToString() });
}
感謝托馬斯 - 我很欣賞的指針再度最佳實踐,但我不是在看200或500錯誤。這更適合驗證我返回成功的位置,然後返回相關的局部視圖。有成功和失敗的觀點,但是我仍然需要在返回結果後在頁面的其他地方做一些處理。我儘可能簡單地舉例說明技術答案,而不是設計方案。再次感謝你的回覆! – Chev 2010-04-11 06:48:20
托馬斯 - 使用mvc 1.0我沒有訪問ControllerContext.ParentActionViewContext屬性? – Chev 2010-04-11 10:57:40
嗯......我所展示的代碼顯然來自於.NET 4的MVC 2,因爲這正是我正在使用的。我將在MVC 1中查看一些方法 - 但我的搜索算法將是「ah,intellisense - 嗯,這是什麼?」,所以你可以儘可能地發現它:P – 2010-04-11 11:45:36