C# ASP.NET MVC:如何创建基本的伪Viewstate?还是更好的解决方案?

C# ASP.NET MVC:如何创建基本的伪Viewstate?还是更好的解决方案?,c#,.net,asp.net-mvc,viewstate,C#,.net,Asp.net Mvc,Viewstate,我是MVC新手,了解MVC的所有优点,包括viewstate不可用的原因,但是在某些情况下,我认为拥有某种视图状态非常方便,在我的例子中,我考虑的是可以应用于列表的具有各种搜索过滤器的列表页 在某些情况下,实现某种伪viewstate来保存此信息是否值得?还是有更好的解决方案 有什么例子吗 感谢您的评论。在ASP.NET MVC中,状态保留通常通过将状态信息返回视图来处理 例如,在中,它们显示如何提交表单、检查错误,以及如果存在错误,则在数据保持不变的情况下再次显示表单,包括必要的错误消息 这是

我是MVC新手,了解MVC的所有优点,包括viewstate不可用的原因,但是在某些情况下,我认为拥有某种视图状态非常方便,在我的例子中,我考虑的是可以应用于列表的具有各种搜索过滤器的列表页

在某些情况下,实现某种伪viewstate来保存此信息是否值得?还是有更好的解决方案

有什么例子吗


感谢您的评论。

在ASP.NET MVC中,状态保留通常通过将状态信息返回视图来处理

例如,在中,它们显示如何提交表单、检查错误,以及如果存在错误,则在数据保持不变的情况下再次显示表单,包括必要的错误消息

这是因为处理POST的控制器方法只是将数据传递回视图:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues) {

    Dinner dinner = dinnerRepository.GetDinner(id);

    try {

        UpdateModel(dinner);

        dinnerRepository.Save();

        // No Errors, return to detail view
        return RedirectToAction("Details", new { id=dinner.DinnerID });
    }
    catch {

        foreach (var issue in dinner.GetRuleViolations()) {
            ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
        }

        // Errors, display form again.  Pass state information back to form.
        return View(dinner);
    }
}

理论答案

ViewState是ASP.NET WebForms的一个概念,被认为是非常有害的。它用于存储某些控件的状态,并将非常难看的隐藏字段呈现到HTML中。
由于SEO(搜索引擎优化)和其他原因,这对某些人来说是不可取的

MVC没有提供WebForms所提供的一些抽象,原因很简单:

  • 它使您能够完全控制URL和输出HTML
  • WebForms控件(尤其是“高级”控件)呈现垃圾HTML,MVC允许您编写自己的HTML
  • 为了避免这些错误,MVC不使用控件、事件等原理
  • 如果您希望web框架抽象出HTTP的真实行为方式,那么应该继续使用WebForms
事实上,HTTP是一种无状态的协议,WebForms试图通过引入控件及其状态和事件的概念来隐藏它。
MVC不会对你撒谎,也不会对你隐瞒任何事情

实用的anwser

您可以使用
ViewData
而不是
ViewState

您可以在
控制器
中设置一个项目(
ViewData[“Something”]=yourObject
),然后可以在
视图
中检索该项目。你可以用它来“记住”你想要的任何东西

因此,基本上,持久化信息包括从相应的
Controller
操作中的
Request.QueryString
Request.Form
读取信息,将其设置到
ViewData
,然后在
视图中检索
ViewData
信息

例如:

控制器操作:

string textBoxValue = Request.Form["myTextBox"];
...
ViewData["myTextBox"] = textBoxValue;
视图:


更多内容

在此阅读一些与MVC相关的问题(如),并阅读MVC书籍(至少是免费的NerdDinner章节)。

我保证,MVC会让你更容易理解

[需要引证]一个带有垃圾值的隐藏输入字段对搜索引擎优化没有已知的影响。尽管如此,有些人还是不喜欢它。大多数web控件呈现垃圾html.jfar:WebForms应用程序中的ViewState可能会变得非常大,从而增加页面大小的权重,使您的网站速度变慢。谷歌已经开始在他们的排名中考虑页面性能,所以Venemo所说的关于Viewstate和SEO的内容是有效的。@Sunday-谢谢你确认我。
<% using (Html.BeginForm()) { %>
<%= Html.TextBox("myTextBox") %>
<% } %>