Asp.net mvc 如何在mvc2中使用TrypUpdateModel更新ViewData

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-->”

我的视图中填充了模型属性,一些下拉列表是硬编码的,通过viewdata传递给view,问题是Trupdatemodel仅更新模型值,我无法更新viewdata值,下面是更新模型但不更新viedata下拉列表的代码:

视图:


型号(日期)%>
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");
        }


    }