如何从另一个控制器方法?

时间:2018-01-24 16:20:22

标签: asp.net-mvc

我有这个控制器:

public class HomeController : Controller
{
        public ActionResult Index()
        {
            return View();
        }

        public PartialViewResult SearchData(DataClass dc)
        {
            //Some logic
            return PartialView(data);
        }

        public ActionResult Search(DataClass dc)
        {
            //Some logic
            return View(dc);
        }

        [HttpGet]
        public ActionResult Info(string edrpou)
        {
            //Some logic
            return View(dc);
        }

        [HttpPost]
        public ActionResult Info(DataClass dc)
        {
            // ???
            return View("Search", dc);
        }
}

在视图中Search.cshtml我有一些形式,如

  @Html.TextBoxFor(x => x.Param, new { @class = "form-control", @id = "textBox" })

创建查询字符串并<input type="submit" />进行确认。然后我从db显示一些信息并创建链接

@Html.ActionLink((string)Model.Rows[i]["NAME"], "Info", "Home", new { edrpou = (string)Model.Rows[i]["EDRPOU"] }, null)

按下后重定向到Info.cshtml。结果我得到/Home/ResultInfo?edrpou=41057472页面,其中包含一些信息和表单,例如SearchInfo参考静止/Home/ResultInfo?edrpou=41057472中按下确认按钮后,我希望在按下该按钮后使用Search中的逻辑。

P.S。在PartialViewResult中触发了Search,按Info

中的确认按钮完全符合我的要求

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

看起来您需要RedirectToAction

[HttpPost]
public ActionResult Info(DataClass dc)
{
    // some specific logic, if any

    return RedirectToAction("Search");
}

因为你需要移动DataClass对象,你也可以使用TempData

[HttpPost]
public ActionResult Info(DataClass dc)
{
    // some specific logic, if any

    TempData['data'] = dc; //of course 'data' is not a good name, use something more specific
    return RedirectToAction("Search");
}

public ActionResult Search(DataClass dc)
{
    if (dc == null && TempData.ContainsKey('data'))
        dc = (DataClass)TempData['data'];

    //Some logic
    return View(dc);
}

或者您可以直接拨打Search,但这并不好,因为它不会将用户重定向到正确的路线:它看起来好像用户仍在“信息”页面上,而实际上他们已经在“搜索”。