Asp.net mvc 如何在mvc2中使用TrypUpdateModel更新ViewData
我的视图中填充了模型属性,一些下拉列表是硬编码的,通过viewdata传递给view,问题是Trupdatemodel仅更新模型值,我无法更新viewdata值,下面是更新模型但不更新viedata下拉列表的代码: 视图:Asp.net mvc 如何在mvc2中使用TrypUpdateModel更新ViewData,asp.net-mvc,asp.net-mvc-2,viewdata,Asp.net Mvc,Asp.net Mvc 2,Viewdata,我的视图中填充了模型属性,一些下拉列表是硬编码的,通过viewdata传递给view,问题是Trupdatemodel仅更新模型值,我无法更新viewdata值,下面是更新模型但不更新viedata下拉列表的代码: 视图: 型号(日期)%> model.Date,新的{@Value=model.Date.ToSortDateString()})%> 型号(日期)%> 经验水平 model.experienceLevel,(SelectList)视图数据[“体验”],“--select-->”
型号(日期)%>
model.Date,新的{@Value=model.Date.ToSortDateString()})%>
型号(日期)%>
经验水平
model.experienceLevel,(SelectList)视图数据[“体验”],“--select-->”
model.experiencevelid)%%>
出席人数
价格/单位
第二司机
·model.SecondDriverPrice,新{maxlength=“5”,style=“width:40px;”})%>价格
型号.第二驱动程序)%>免费
头盔数量
价格/单位
控制器:
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
ViewBag.mode = "edit";
// for dropdown track
ITrackRepository trackResp = new TrackRepository();
IQueryable<Object> tracks = trackResp.GetVenuesSelectlist();
ViewData["Venue"] = new SelectList(tracks, "VenueID", "Name");
// for dropdown for event type
ITrackdayRepository trackdayResp = new TrackdayRepository();
IQueryable<EventType> eventTypes = trackdayResp.GetAllEventTypes();
ViewData["EventTypes"] = new SelectList(eventTypes, "ID", "Name");
// for dropdown experience
IExperienceLevelRepository expLevelResp = new ExperienceLevelRepository();
IQueryable<ExperienceLevel> expLevel = expLevelResp.GetAllExperienceLevels().OrderBy(ExperienceLevel => ExperienceLevel.Name);
ViewData["Experience"] = new SelectList(expLevel, "ID", "Name");
// dropdown for helmets
IProductRepository helmetResp = new ProductRepository();
Product productHelmet = helmetResp.GetProd(id);
var attendeesList = Enumerable.Range(1, 80).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
ViewData["attendees1"] = new SelectList(attendeesList.ToList(), "Value", "Text");
// dropdown for helmets
var helmetsList = Enumerable.Range(1, 200).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
ViewData["helmets"] = new SelectList(helmetsList.ToList(), "Value", "Text");
//ViewBag.helmet = new SelectList(helmets.ToList(), "Value", "Text", product.QtyAvailable);
// dropdown for garages
var garagesList = Enumerable.Range(1, 50).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
ViewData["garages"] = new SelectList(garagesList.ToList(), "Value", "Text");
Event trackday = trackdayResp.GetEvent(id);
TryUpdateModel(trackday, collection);
if (ModelState.IsValid)
{
// product.DateModified = DateTime.Now;
trackday.DateModified = DateTime.Now;
TempData["msg"] = trackdayResp.Save().ToString();
helmetResp.Save();
return RedirectToAction("Index");
}
else
{
return View("Create");
}
}
[HttpPost]
公共操作结果编辑(int id,FormCollection集合)
{
ViewBag.mode=“编辑”;
//用于下拉式轨道
ITrackRepository trackResp=新的TrackRepository();
IQueryable tracks=trackResp.getVenueSelectList();
ViewData[“场馆”]=新的选择列表(曲目,“VenueID”、“名称”);
//用于事件类型的下拉列表
ITrackdayRepository trackdayResp=新的TrackdayRepository();
IQueryable eventTypes=trackdayResp.GetAllEventTypes();
ViewData[“EventTypes”]=新的选择列表(EventTypes、“ID”、“名称”);
//下载体验
IEExperienceLevelRepository expLevelResp=新的ExperienceLevelRepository();
IQueryable explovel=explovelResp.getAllExperienceLevel().OrderBy(ExperienceLevel=>ExperienceLevel.Name);
ViewData[“Experience”]=新的选择列表(解释级别、“ID”、“名称”);
//头盔下拉列表
IPProductRepository helmetResp=新产品存储库();
Product PRODUCTHELME=helmetResp.GetProd(id);
var AttendesList=Enumerable.Range(1,80).Select(x=>new SelectListItem{Value=x.ToString(),Text=x.ToString()});
ViewData[“Attendes1”]=新的选择列表(AttendesList.ToList(),“值”,“文本”);
//头盔下拉列表
var helmetsList=Enumerable.Range(1200).Select(x=>newselectListItem{Value=x.ToString(),Text=x.ToString()});
ViewData[“头盔”]=新的选择列表(helmetsList.ToList(),“值”,“文本”);
//ViewBag.helm=新选择列表(helmets.ToList(),“值”,“文本”,product.QtyAvailable);
//车库下拉菜单
var garagesList=Enumerable.Range(1,50).Select(x=>newselectListItem{Value=x.ToString(),Text=x.ToString()});
ViewData[“garages”]=新的选择列表(garagesList.ToList(),“值”,“文本”);
Event trackday=trackdayResp.GetEvent(id);
TryUpdateModel(轨道日、集合);
if(ModelState.IsValid)
{
//product.DateModified=DateTime.Now;
trackday.DateModified=DateTime.Now;
TempData[“msg”]=trackdayrep.Save().ToString();
helmetResp.Save();
返回操作(“索引”);
}
其他的
{
返回视图(“创建”);
}
}
您需要在模型中为TryUpdateModel
更新您想要更新的数据来更新这些值。如果您只是将它们放在ViewData中,数据将只传递给视图,控制器无法使用TryUpdateModel
更新这些值
您需要将当前在ViewData中的选择列表数据包含到
事件
对象中,或者创建一个包含要更新的值的对象。然后使用TryUpdateModel
将使用发布的值更新该数据。创建此新对象或将其添加到事件中时,请强烈键入此对象的视图,这样您就不需要在视图中执行ViewData强制转换。顾名思义,TryUpdateModel会在可能的情况下更新模型。ViewData仅用于视图,无需更新itI需要更新“我的编辑”菜单中的选定列表,该列表通过查看数据填充。例如,在“编辑”视图中,如果用户从“与会者列表”中选择与会者,则应像对模型所做的那样更新数据库。您可以为我提供一个示例吗。。我曾尝试为所有硬编码的下拉列表创建自定义类型视图模型,但失败惨重:(
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
ViewBag.mode = "edit";
// for dropdown track
ITrackRepository trackResp = new TrackRepository();
IQueryable<Object> tracks = trackResp.GetVenuesSelectlist();
ViewData["Venue"] = new SelectList(tracks, "VenueID", "Name");
// for dropdown for event type
ITrackdayRepository trackdayResp = new TrackdayRepository();
IQueryable<EventType> eventTypes = trackdayResp.GetAllEventTypes();
ViewData["EventTypes"] = new SelectList(eventTypes, "ID", "Name");
// for dropdown experience
IExperienceLevelRepository expLevelResp = new ExperienceLevelRepository();
IQueryable<ExperienceLevel> expLevel = expLevelResp.GetAllExperienceLevels().OrderBy(ExperienceLevel => ExperienceLevel.Name);
ViewData["Experience"] = new SelectList(expLevel, "ID", "Name");
// dropdown for helmets
IProductRepository helmetResp = new ProductRepository();
Product productHelmet = helmetResp.GetProd(id);
var attendeesList = Enumerable.Range(1, 80).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
ViewData["attendees1"] = new SelectList(attendeesList.ToList(), "Value", "Text");
// dropdown for helmets
var helmetsList = Enumerable.Range(1, 200).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
ViewData["helmets"] = new SelectList(helmetsList.ToList(), "Value", "Text");
//ViewBag.helmet = new SelectList(helmets.ToList(), "Value", "Text", product.QtyAvailable);
// dropdown for garages
var garagesList = Enumerable.Range(1, 50).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
ViewData["garages"] = new SelectList(garagesList.ToList(), "Value", "Text");
Event trackday = trackdayResp.GetEvent(id);
TryUpdateModel(trackday, collection);
if (ModelState.IsValid)
{
// product.DateModified = DateTime.Now;
trackday.DateModified = DateTime.Now;
TempData["msg"] = trackdayResp.Save().ToString();
helmetResp.Save();
return RedirectToAction("Index");
}
else
{
return View("Create");
}
}