【问题标题】:How do you preserve the viewstate while using strongly typed views in asp MVC 2?在 asp MVC 2 中使用强类型视图时如何保留视图状态?
【发布时间】:2023-03-26 17:31:01
【问题描述】:

我有一个从强类型视图返回的 ActionResult,我在该视图中手动验证了一些条件,传递了一条错误消息,但希望保留用户的响应。

由于我的视图是强类型的,我这样称呼它:

return View("PrincipalInvestigatorForm", new SmartFormViewModel(sections, questions));

不过,我的问题是显示了错误消息,但所有用户数据都被擦除了。如何在 MVC 中保留“ViewState”?有什么简单的方法吗?

【问题讨论】:

    标签: asp.net-mvc-2


    【解决方案1】:

    你的动作是什么样的?我正在使用这样的东西:

    [HttpPost]
    public ActionResult Edit(MyModel model)
    {
        if (ViewData.ModelState.IsValid)
        {
            // Whatever...
        }
        else
        {
            return View("Editmodel", model)
        }
    }
    

    【讨论】:

    • 谢谢,这会起作用,但是有一个问题,我使用的是 ViewModel,但是当我有一个以 ViewModel 作为参数的 ActionResult 时,我收到一个错误,说我需要一个无参数的方法,甚至尽管我的视图是强类型的(对于我的 ViewModel)。
    • @Mark Kadlec:您的操作上方是否有 HttpPost 属性,您是否有 2 个操作用于编辑,一个用于查看,一个用于发布?
    • 只有一个 Post 方法,它确实具有属性。我打电话: [AcceptVerbs(HttpVerbs.Post)] public ActionResult Next(List answers) { ... } 这永远不会被调用。不能返回列表吗?
    【解决方案2】:

    最好的办法是根据表单信息重新填充 SmartFormViewModel 模型。

    【讨论】:

    • 谢谢 Bryan,我想这是一个选择,没什么大不了的,我认为可能有一个更快的选择(银弹),但是当我想到它时,我必须拥有内存中的整个 HTML 字符串和 Formscollection 更多的是结果数组。至少可以很容易地解析结果,而且好处是我现在可以完全控制要坚持的内容。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多