Asp.net mvc MVC控制器同时调用视图和回发视图?

Asp.net mvc MVC控制器同时调用视图和回发视图?,asp.net-mvc,Asp.net Mvc,我有一个令人不安的问题,我使用名称视图作为我的视图。正常情况下,创建初始页面和回发以保存 public ActionResult View(int id) { Models.PageContent model = Controllers.PageContent.Get(id); return View(model); } [HttpPost] [ValidateInput(false)] public ActionResult View(Models.PageContent m

我有一个令人不安的问题,我使用名称视图作为我的视图。正常情况下,创建初始页面和回发以保存

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);
    }
}

奇怪的是,普通视图和后置视图都被调用了,但它根本不起作用。

啊,好吧,那就说明发生了什么。在您调用的
View(int-id)
方法
View(model)
,其中
model
的类型为
PageContent
。当.NET尝试解析重载方法时,它会选择最具体的方法,即同一控制器中正下方的方法。基本控件中的方法实际上定义为
视图(对象模型)
,它比
视图(页面内容模型)
更具体,因此它解决了对方法的HttpPost版本而不是方法的基类版本的调用

有关更改方法名称的注释是正确的。您选择的方法名称与提供的框架
View
method冲突

如果要在URL中使用
View
,可以使用
ActionName
属性

[ActionName( "View" )]
public ActionResult GetView( int id )

[HttpPost]
[ActionName( "View" )]
public ActionResult PostView( Models.PageContent model )

我在家里用VS2013做了一个测试,实际上我得到了一条绿色的曲线来警告我。出于某种原因,在我和其他开发者身上,这并没有显示出来。可能是因为它是MVC3,而不是我测试的4


也许今天早上我只是半睡半醒,但我不明白你说的“调用普通视图和后视图”是什么意思。你是说如果浏览器要求它同时执行这两个操作?或者你是说,如果其中一个操作执行,它将返回两个视图?你必须重命名View()函数或更改参数。看看返回视图(模型)…它应该放在哪里?它当然会调用另一个视图(操作)!(HttpPost处理程序)更改操作名称,如果模型验证失败,您将调用相同的操作,而不是视图()function@CraigW. 发生的情况是,首先执行/Foo/View/1,然后直接执行,
[HttpPost]
操作甚至不返回浏览器,并使用“GET”操作中的模型执行@MikeC为什么我必须重命名视图?这是一个特殊的名字。我想先“查看”,然后在按Save时返回到HTTPPOST操作。这是一个正常的方式,始终有效。为什么这两种方法都在同一个堆栈上被调用?为什么VisualStudio不会让我们感到温暖呢。这实际上意味着单词View被解析为类
View()
,而不是将其视为变量。您可以看到,VS2013中的语法分析器甚至没有用蓝色突出显示单词
View
,就像任何类一样,它是纯黑色的。因此,如果将
视图
更改为
编辑
,它将正常工作。那么,这是否意味着我不能在操作中使用任何单词,即命名空间中的类?单词
View
从来都不是变量。在语句
returnview(model)
中,它不是一个类,而是一个方法
View()
是在基本控制器类上声明的一种方便方法,基本上是
新ViewResult(model)
的快捷方式。