我有这个令人精神上令人不安的问题,我使用View for my Views。正常情况下,创建初始页面和回发以保存。
public ActionResult View(int id)
{
Models.PageContent model = Controllers.PageContent.Get(id);
return View(model);
}
[HttpPost]
[ValidateInput(false)]
public ActionResult View(Models.PageContent model)
{
if (ModelState.IsValid)
{
Controllers.PageContent.UpdatePageContent(model.PageContentID, model.Title, model.Text);
ViewBag.Success = true;
return RedirectToAction("Index");
}
else
{
return View(model);
}
}
奇怪的是普通视图和后视图都被调用,它只是不起作用。
答案 0 :(得分:1)
啊,好吧,那对于发生的事情是有意义的。在View(int id)
方法中,您呼叫View(model)
,其中model
的类型为PageContent
。当.NET尝试解析重载方法时,它会选择最具体的方法,这就是下面同一个控制器中的方法。基本控件中的方法实际上定义为View(Object model)
,其特定性不如View(PageContent model)
,因此它解析了对方法的HttpPost版本的调用,而不是方法的基类版本。
关于更改方法名称的注释是正确的。您选择的方法名称与框架提供的View
方法相冲突。
如果您想在网址中使用View
,可以使用ActionName
属性。
[ActionName( "View" )]
public ActionResult GetView( int id )
[HttpPost]
[ActionName( "View" )]
public ActionResult PostView( Models.PageContent model )
答案 1 :(得分:0)
我在VS2013上进行了家庭测试,实际上我有一个绿色的波浪形警告我。出于某种原因,我和其他开发商都没有表现出来。可能是因为它是MVC3,而不是像我的测试那样。