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