HTTPPOST属性在MVC中不起作用

时间:2015-07-28 10:09:39

标签: asp.net-mvc asp.net-mvc-routing

我有一个Controller,其中定义了两个动作。

public class ExamlpeController : Controller
{
    [Route("Index")]
    public ActionResult Index()
    {
        return View(new ExampleViewModel { Message = new MessageDisplay { MessageVisible = false, IsGoodMessage = true, Message = String.Empty } });
    }

    // POST:
    [HttpPost]
    [Route("Index/{exampleData?}")]
    public ActionResult Index(ExampleViewModel exampleData)
    {
        if (!ModelState.IsValid) // If model state is invalid
            // Return view with validation summary
            return View(new ExampleViewModel { Message = new MessageDisplay { MessageVisible = false, IsGoodMessage = true, Message = String.Empty } });
        else // If model state is valid
        {
            // Process further
            bool isGoodMessage = true; // Default

            string message = "success";
            isGoodMessage = true;
            message = "test data";

            // Clear model state if operation successfully completed
            if (isGoodMessage)
                ModelState.Clear();

            return View(new ExampleViewModel { Message = new MessageDisplay { IsGoodMessage = isGoodMessage, MessageVisible = true, Message = message } });
        }
    }
}

所以,当我的观点被调用时,那么首先"索引"动作被调用,但是当我发布我的表单时,它也称为第一个索引方法。

此代码在旧版本中运行良好,新版本包含一些与此Controller无关的更改,但它无法正常工作,

当我用第一个动作添加HTTPGET属性时,它工作正常, 在页面加载时调用第一个操作,在页面上调用第二个操作。

所以,我的问题是如何维护路由表以及这种情况的原因。

1 个答案:

答案 0 :(得分:1)

在您的POST操作中,将[Route("Index/{exampleData?}")]更改为[Route("Index")],它应该有效。您不会将POSTed视图模型作为路径的一部分包含在内 - 考虑一下,它如何在URL中显示发布的数据?