我有一个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属性时,它工作正常, 在页面加载时调用第一个操作,在页面上调用第二个操作。
所以,我的问题是如何维护路由表以及这种情况的原因。
答案 0 :(得分:1)
在您的POST操作中,将[Route("Index/{exampleData?}")]
更改为[Route("Index")]
,它应该有效。您不会将POSTed视图模型作为路径的一部分包含在内 - 考虑一下,它如何在URL中显示发布的数据?