ASP.NET MVC重定向到操作不会呈现最终视图

时间:2015-12-17 09:04:16

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

我正在尝试这段代码: -

如果没有提供给索引方法的查询字符串,则呈现分支定位器视图。在该视图中选择分支ID后,回发到路由结果重定向或操作结果方法,然后使用所选分支ID的查询字符串重定向回索引。

我可以成功运行代码,然后使用查询字符串。 我甚至通过索引视图运行并且可以看到模型工作但是,索引视图不呈现,分支选择器视图仍然存在。执行重定向时,网络开发人员工具会正确显示正确的URL和查询字符串。

(注意:两种方法都在同一个控制器上)。

如果我直接在浏览器地址栏中添加相同的查询字符串,它可以正常工作!

我有这段代码:

[HttpGet]
public ActionResult Index()
{
   var querystringbranchId = Request.QueryString["branchId"];

   if(!string.IsNullOrEmpty(querystringId))
   {
       ....do stuff like build a model using the branchId...

       return View(Model);
   }

   return View("BranchSelector")
}

[HttpPost]
public RedirectToRouteResult BranchDetails(FormCollection formCollection)
{
    var querystringBranchId = formCollection["BranchList"];
    var branchId = int.Parse(querystringBranchId);

    return RedirectToAction("Index", new { branchId });
}

2 个答案:

答案 0 :(得分:2)

尝试在帖子上使用强类型模型,并将param指定为实际参数 - 使用View模型对你来说会更好。

我已经测试了以下内容 - 它似乎对我有效:

[HttpGet]
public ActionResult Index(int? branchId)
{
    if (branchId.HasValue)
    {
        return View(branchId);
    }

    return View("BranchSelector");
}

[HttpPost]
public RedirectToRouteResult BranchDetails(MyModel myModel)
{
    return RedirectToAction("Index", new { myModel.BranchId });
}

public class MyModel
{
    public int BranchId { get; set; }
}

视图:

<div>
    @using (Html.BeginForm("BranchDetails", "Home", FormMethod.Post))
    {
        @Html.TextBox("BranchId","123")
        <input type="submit" value="Go"/>
    }
</div>

答案 1 :(得分:1)

@MichaelLake感谢您的帖子我发现了问题。我尝试了你的代码,确定它按预期工作。我没有提到我正在使用装有分支的Kendo Combobox控件(!)。我没有提到,因为我需要的实际数据在post方法中可用,所以认为问题在于Controller方法。我将Kendo控件名称作为BranchList,我将其更改为BranchId,现在可以按预期使用原始代码! Kendo名称成为元素Id并且必须匹配才能工作。

非常感谢!