MVC控制器同时调用视图和回发视图?

时间:2014-04-11 16:11:59

标签: asp.net-mvc

我有这个令人精神上令人不安的问题,我使用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);
    }
}

奇怪的是普通视图和后视图都被调用,它只是不起作用。

2 个答案:

答案 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,而不是像我的测试那样。

enter image description here