加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:56:49 所属栏目:asp.Net 来源:网络整理
导读:我的设置: 查看以下路线:/ Pages / Details / 2 页面详细信息视图具有%Html.RenderAction(“CreatePageComment”,“Comments”); %GT;呈现评论表单 评论表单发布到评论/ CreatePageComment / Comments / CreatePageComment在成功创建注释时返回RedirectT
我的设置:

>查看以下路线:/ Pages / Details / 2
>页面详细信息视图具有<%Html.RenderAction(“CreatePageComment”,“Comments”); %GT;呈现评论表单
>评论表单发布到评论/ CreatePageComment
> / Comments / CreatePageComment在成功创建注释时返回RedirectToAction
>这一切都很好用

我的问题:

如果存在验证错误,我应该如何返回/ Pages / Detail / 1并在评论表单中显示错误?

>如果我使用RedirectToAction,似乎验证很棘手;我是否应该使用Post-Redirect-Get模式进行验证错误,而不仅仅是返回?
>如果我返回View(),它会让我回到显示CreateComment.aspx视图(带有验证,但只是白页上的表单),而不是调用RenderAction的/ Pages / Details / 2路径.

如果应该使用PRG模式,那么我认为我只需要学习如何在使用PRG时进行验证.如果没有 – 对我而言,返回View()似乎可以更好地处理 – 然后我不知道如何让用户返回到初始视图,显示表单错误,同时使用RenderAction.

这感觉就像你敲击你的头并同时揉肚子的游戏.我也不擅长那个.我是MVC的新手,所以这可能是问题所在.

解决方法

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

在我看来(/步骤/细节)我有:

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

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

在我的评论控制器中,我有我的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",new { id = commentToCreate.StepId });
        }
    }

在评论控制器中也是我的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装饰,看起来这样做,但是更清洁.我接下来要尝试一下.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读