2011-05-23 57 views
3

我在使用MVC 3.0中的RedirectToAction時遇到了一個奇怪的問題。RedirectToAction和「對象移到這裏」錯誤

這裏是我的樣品視圖模型的代碼

public class EventViewModel 
{ 
    [Required(ErrorMessageResourceType = typeof(Resources.Validations), ErrorMessageResourceName = "Required")] 
    public DateTime CreationDate { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resources.Validations), ErrorMessageResourceName = "Required")] 
    [AllowHtml] //here is my apparent problem 
    public string Description { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resources.Validations), ErrorMessageResourceName = "Required")] 
    [Range(0, 5, ErrorMessageResourceType = typeof(Resources.Validations), ErrorMessageResourceName = "RangeValue")] 
    public int Rating { get; set; } 
    [Required(ErrorMessageResourceType = typeof(Resources.Validations), ErrorMessageResourceName = "Required")] 
    public string Title{ get; set; } 

    ...other properties... 

} 

這裏是我的控制器的兩種方法

public ActionResult Edit(int id) 
{ 
    var entity = eventsRepository.Get(id); 
    if (entity == null) 
    return RedirectToAction("Index"); 
    var eventVM = new EventViewModel(); 
    eventVM.Description = entity.Description; 

    ... set the other properties ... 

    return View(eventVM); 
} 

[HttpPost] 
public ActionResult Edit(int id, EventViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
    try 
    { 
     var entity = eventsRepository.Get(id); 
     if (entity == null) 
     return RedirectToAction("Index"); 
     entity.CreationDate = model.CreationDate; 
     entity.Description = model.Description; 

     ... set the other properties ... 

     eventsRepository.Save(entity); 
     return RedirectToAction("Index"); 
    } 
    catch (Exception e) 
    { 
     ModelState.AddModelError("", "An error occured bla bla bla"); 
    } 
    } 

    return View(model); 
} 

我的問題是,如果我刪除AllowHtmlAttribute,並在描述中插入純文本字段,一切正常,我保存後得到我的重定向,但如果我把AllowHtmlAttribute放在字段描述上並插入一些Html文本,在保存而不是重定向後,我得到一個只有這個文本的空白頁面:

Object moved to here. 

如果我點擊「這裏」,我被重定向到正確的網址。

我錯過了一些明顯的東西嗎?

回答

3

它實際上會用MVC一個HTTP模塊的干擾。我有同樣的問題,並通過從主web.config中刪除以下內容來修復它。

<add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v11.1, Version=11.1.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" /> 
+0

謝謝你解決了這個問題。我沒有注意到,在新的示例項目中,我沒有在httpmodule中包含devexpress的調用。 – Iridio 2012-02-08 09:05:46

3

閱讀本文forum post。在處理重定向之前修改http頭部時,您會收到錯誤消息。我不確定[allowhtml]屬性是如何引起的,但至少我認爲它是一個跳躍點。

+0

我知道標題問題,並與小提琴看我沒有看到任何區別。猜猜我必須創建一個簡單的項目,並從頭開始嘗試找到真正的問題。我也是我對allowhtml的懷疑,但如果我刪除它的一切工作,所以問題應該在於處理html值的方式。 – Iridio 2011-05-27 14:05:47

+0

@Iridio,這將是我會去的路線。祝你好運,解決這個問題,當你確實想出來的時候,一定要把答案發回到這裏。 – 2011-05-27 14:16:38

+0

我用一個假的存儲庫從頭開始創建一個項目,並按預期工作。所以我開始假設有一些與[AllowHtml]屬性一致的東西。也許保存我的存儲庫。 (不太可能,但是我有唯一的區別),當我有更多的時間時,我會再次重寫我的代碼,並試圖找出真正的原因,並回到這裏。 – Iridio 2011-05-28 08:24:07

0

RedirectToAction會向瀏覽器發送一個新的HTTP響應。我不明白ASP.Net在幕後做了什麼,但顯然它創建了一個頁面,該頁面鏈接到您在RedirectToAction調用中指定的Action。

我並不完全清楚Edit(int id, EventViewModel model)中的實體,但似乎可以使用它來獲取編輯視圖所需的EventViewModel

Edit(int id, EventViewModel model) 

... set the other properties ... 

eventsRepository.Save(entity); 

後添加

var eventVM = new EventViewModel(); 
eventVM.Description = entity.Description; 

... set the other properties ... 

return View(eventVM); 
+0

我在示例代碼中犯了一個錯誤。保存後,我想重定向到索引,而不是再次編輯。無論如何,在兩種情況下,我都會得到同樣的錯誤相反,如果我按照你的建議返回查看(eventVM)一切正常,但不是我需要:( – Iridio 2011-05-28 08:14:45