gpt4 book ai didi

asp.net-mvc - RenderAction 应该与表单一起使用吗?

转载 作者:行者123 更新时间:2023-12-04 19:23:22 24 4
gpt4 key购买 nike

我的设置:

  • 查看一条路线,如:/Pages/Details/2
  • 页面详情 View 有<% Html.RenderAction("CreatePageComment", "Comments"); %>呈现评论表单
  • 评论表单发布到 Comments/CreatePageComment
  • /Comments/CreatePageComment返回 RedirectToAction成功创建评论时
  • 这一切都很好

  • 我的问题:

    如果有验证错误,我应该如何返回 /Pages/Detail/1并在评论表中显示错误?
  • 如果我使用 RedirectToAction ,似乎验证很棘手;我是否应该使用 Post-Redirect-Get 模式来处理验证错误,而不是仅仅返回?
  • 如果我返回 View()它让我回到展示 CreateComment.aspx View (带验证,但只是一个白页上的表单),而不是 /Pages/Details/2调用 RenderAction 的路由.

  • 如果应该使用PRG模式,那么我想我只需要学习如何在使用PRG时进行验证。如果没有 - 对我来说这似乎通过返回 View() 更好地处理- 然后我不知道如何让用户返回到初始 View ,显示表单错误,同时使用 RenderAction .

    这感觉就像你一边敲头一边揉肚子的游戏。我也不擅长那个。我是 MVC 的新手,所以这可能是这里的问题。

    最佳答案

    我相信答案是使用 TempData,例如:

    在我看来(/Steps/Details)我有:

    <!-- List comments -->
    <% Html.RenderAction("List", "Comments", new { id = Model.Step.Id }); %>

    <!-- Create new comment -->
    <% Html.RenderAction("Create", "Comments", new { id = Model.Step.Id }); %>

    在我的评论 Controller 中,我有我的 POST 方法:
        // POST: /Comments/Create
    [HttpPost]
    public ActionResult Create([Bind(Exclude = "Id, Timestamp, ByUserId, ForUserId")]Comment commentToCreate)
    {
    if (ModelState.IsValid)
    {
    //Insert functionality here

    return RedirectToAction("Details", "Steps", new { id = commentToCreate.StepId });

    }

    //If validation error
    else
    {

    //Store modelstate from tempdata
    TempData.Add("ModelState", ModelState);

    //Redirect to action (this is hardcoded for now)
    return RedirectToAction("Details", "Steps", new { id = commentToCreate.StepId });
    }
    }

    在评论 Controller 中还有我的 GET 方法:
        //
    // GET: /Comments/Create

    public ActionResult Create(int id)
    {

    if (TempData.ContainsKey("ModelState"))
    {
    ModelStateDictionary externalModelState = (ModelStateDictionary)TempData["ModelState"];
    foreach (KeyValuePair<string, ModelState> valuePair in externalModelState)
    {
    ModelState.Add(valuePair.Key, valuePair.Value);
    }
    }
    return View(new Comment { StepId = id });
    }

    这对我很有用,但我很感激关于这是否是一个好的做法等的反馈。

    另外,我注意到 MvcContrib 有一个 ModelStateToTempData 装饰,它似乎可以做到这一点,但方式更简洁。我接下来要试试。

    关于asp.net-mvc - RenderAction 应该与表单一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036183/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com