如何将ID传递给另一个视图的默认值

时间:2014-02-25 14:47:02

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我有一份可以有相关工作的事件清单。我对事件和工作有单独的看法。从事件索引页面,我有以下链接为该事件创建新作业:

 @Html.ActionLink("Create","Create", "Job", new { id = item.IncidentID }, null)

从该字段获取事件ID并加载Job视图。我想将ID作为创建新作业的默认值传递,因此将为作业分配事件ID。

我做了这个控制器:

public ActionResult Create(int? id)
{
     if (id == null)
     {
           return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
     }
     var newid = id;


     ViewBag.ActionCode = new SelectList(db.ActionTypes, "ActionCode", "ActionType1");
     ViewBag.IncidentID = new SelectList(db.Incidents, "IncidentID", "DefectFreeText");
     return View();
}

如何在创建作业视图中为表单指定默认值?我想到这样的事情:

@Html.EditorFor(model => model.IncidentID, id/newid)

任何人都可以帮我弄清楚我做错了吗?

2 个答案:

答案 0 :(得分:2)

我假设您要为用户将创建操作方法作为查询字符串传递给事件下拉列表时设置默认项。我会避免使用ViewBag方法将下拉列表数据传输到视图并切换到强类型视图模型方法。

首先为我们的创建视图创建一个viewmodel。

public class CreateJobVM
{
  public int IncidentID { set;get;}
  public int ActionTypeID { set;get;}
  public List<SelectListItem> ActionTypes { set;get;}
  public List<SelectListItem> Incidents{ set;get;} 
  public CreateJobVM()
  {
    ActionTypes =new List<SelectListItem>();
    Incidents=new List<SelectListItem>();
  }
}

在你的GET视图中,

public ActionResult Create(int? id)
{
  var vm=new CreateJobVM();
  vm.ActionTypes=GetActionTypes();
  vm.Incidents=GetIncidents();
  if(id.HasValue)
  {
     //set the selected item here
     vm.IncidentID =id.Value;
  }
  return View(vm);
}

假设GetActionTypesGetIncidents方法返回SelectListItems的列表,从数据库表/ XML /您拥有数据的任何地方

public List<SelectListItem> GetActionTypes()
{
   List<SelectListItem> actionTypesList = new List<SelectListItem>();
   actionTypesList = db.ActionTypes
                    .Select(s => new SelectListItem { Value = s.ID.ToString(),
                                                      Text = s.Name }).ToList();
   return actionTypesList;
}

并在您的视图中强烈键入CreateJobVM

@model CreateJobVM
@using(Html.Beginform())
{
 @Html.DropDownListFor(s=>s.ActionTypeID ,Model.ActionTypes)
 @Html.DropDownListFor(s=>s.IncidentID,Model.Incidents)
 <input type="submit" />
}

发布表单时,您可以检查属性值以获取用户在表单

中选择的值
[HttpPost]
public ActionResult Create(CreateJobVM model)
{
  //check for model.IncidentID, ActionTypeID
  // to do : Save and redirect
}

答案 1 :(得分:0)

ViewBag/ViewData

的帮助下传递它
ViewBag.DefaultId=id;

return View();

如果您有基于模型的视图

YourViewModel.DefaultId=id;

return View(YourViewModel);

在视图中,

@ViewBag.DefaultId   

或使用ViewModel

YourViewModel.DefaultId