我在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.
如果我点击“这里”,我会被重定向到正确的网址。
我错过了一些明显的东西吗?
答案 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);