以下是POST
控制器操作的方法签名。
[System.Web.Mvc.HttpPost]
public ActionResult Find(AgentViewModel agent)
POST
方法接受视图模型对象作为输入参数。但是,GET
方法自然是空的,如下所示:
public ActionResult Find()
我们希望能够从两个页面访问POST
操作。从一页开始,我们使用表格。表单数据被序列化到视图模型对象中,并且适当地调用该操作。但是,第二个页面包含一个附加id
值的超链接作为查询字符串(id
是视图模型对象的属性)。
基本上我们尝试以两种不同的方式访问Find
POST
方法:通过将数据序列化为视图模型对象的表单,以及通过包含查询字符串的超链接。
我的问题有两个:我在控制器Initialize
方法上有一个覆盖,它检查RequestContext
对象是否存在查询字符串。由于对象尚未被序列化,我希望,如果找到参数,则创建视图模型对象并将其序列化为HTTPRequest
。由于请求最初是发送到GET
方法的,因此我还想重定向到POST
操作。
这个问题有更简单的黑客/解决方法(即使用GET
中的重定向添加空参数),但是我想找到一个解决方案,将管道定制为挑战。任何方向/想法都非常感谢。
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
if (requestContext.RouteData.Values["action"].ToString() == "Find" &&
requestContext.RouteData.Values.Count > 2)
{
if (requestContext.RouteData.Values["id"] != null)
{
string agentId = requestContext.RouteData.Values["id"].ToString();
AgentViewModel model = new AgentViewModel();
model.AgentId = agentId;
//Need to find a way to redirect from the GET to the POST method
//Need to find a way to add the AgentViewModel object to the request
ActionInvoker.InvokeAction(this.ControllerContext, "Find");
}
}
}