RedirectToAction和“对象移动到此处”错误

时间:2011-05-23 14:21:51

标签: c# asp.net-mvc-3

我在MVC 3.0中遇到RedirectToAction的奇怪问题。

以下是我的示例ViewModel的代码

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 个答案:

答案 0 :(得分:3)

阅读此forum post。如果在处理重定向之前修改了http标头,您将收到该错误消息。我不完全确定[allowhtml]属性如何导致这种情况,但至少它是我认为的跳跃点。

答案 1 :(得分:3)

它的实际原因是httpModule干扰了mvc。我遇到了同样的问题并通过从主web.config中删除以下内容来修复它。

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

答案 2 :(得分: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);