首页 / C# / c# – 为什么列表在帖子上变为空?
c# – 为什么列表在帖子上变为空?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 为什么列表在帖子上变为空?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2975字,纯文字阅读大概需要5分钟。
内容图文
![c# – 为什么列表在帖子上变为空?](/upload/InfoBanner/zyjiaocheng/802/0ace1d9bfe1e40aa822a5835c81fcffe.jpg)
我试图在Asp.Net MVC 3.0中显示一个RadioButtonList.这是我的扩展方法:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Linq.Expressions;
using System.Text;
public static class HtmlExtensions
{
public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList)
{
StringBuilder stringBuilder = new StringBuilder();
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
if (selectList != null)
{
foreach (var item in selectList)
{
var id = string.Format("{0}_{1}", metaData.PropertyName, item.Value);
var label = htmlHelper.Label(id, HttpUtility.HtmlEncode(item.Text));
var radio = htmlHelper.RadioButtonFor(expression, item.Value, new { id = id });
stringBuilder.AppendFormat("<div class=\"RadioButton\">{0}{1}</div>",radio.ToHtmlString(),label.ToHtmlString());
}
}
return new MvcHtmlString(stringBuilder.ToString());
}
}
这些是我的HomeController动作方法:
public ActionResult Index()
{
return View(GetIndexViewModel());
}
private IndexViewModel GetIndexViewModel()
{
List<SelectListItem> list = new List<SelectListItem>
{
new SelectListItem{ Selected = true, Value = "1", Text = "Sunday" },
new SelectListItem{ Selected = false, Value = "2", Text = "Monday" },
new SelectListItem{ Selected = false, Value = "3", Text = "Tuesday" },
new SelectListItem{ Selected = false, Value = "4", Text = "Wednesday" },
new SelectListItem{ Selected = false, Value = "5", Text = "Thursday" },
new SelectListItem{ Selected = false, Value = "6", Text = "Friday" },
new SelectListItem{ Selected = false, Value = "7", Text = "Saturday" },
};
return new IndexViewModel { SelectLists = list, SelectedItem = list[0] };
}
[HttpPost]
public ActionResult Index(IndexViewModel indexViewModel)
{
return View(GetIndexViewModel()); //this works
return View(indexViewModel); //why this doesn't work??
}
这是我的index.cshtml:
@model IndexViewModel
@using (Html.BeginForm())
{
<h2>Select any one item</h2>
@Html.RadioButtonForSelectList(model => model.SelectedItem.Value, Model.SelectLists)
<br />
<input type="submit" value="Submit" />
}
我评论过哪一个有效,哪一个无效.基本上我的列表变为空.我究竟做错了什么?如果我每次都必须这样做,那么最好使用webforms,因为webforms可以保留回发中的数据.使用MVC基本上意味着我必须在每次发布值时进行数据库调用.我是正确的还是我的代码中有错误?
解决方法:
因为在GET操作中绑定了某些内容并不意味着它将被绑定回POST操作中的同一属性.默认模型绑定器仅绑定它在请求中看到的内容.因此,如果在发布时未将此信息发送到服务器,则该信息将丢失.
您的自定义助手会生成一堆单选按钮和标签,但我无法在任何地方看到您为文本属性生成输入字段.结果他们将会迷失.
这就是说你的帮助程序看起来是正确的,在你的POST操作中,如果你想重新显示同一个视图,你应该简单地从你最初支持它的数据存储区中重新获取这些信息.所以正确的方法是:
[HttpPost]
public ActionResult Index(IndexViewModel IndexViewModel)
{
return View(GetIndexViewModel());
}
内容总结
以上是互联网集市为您收集整理的c# – 为什么列表在帖子上变为空?全部内容,希望文章能够帮你解决c# – 为什么列表在帖子上变为空?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。