如何将值传递给MVC4中编辑模式下的字段?

时间:2016-04-13 13:48:21

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

嗨我在视图中有三个字段。下面是三个字段。我想在单击编辑按钮时将值传递给这些字段。这是需要传递给下拉字段的值。我的观点在下面提到

DropDown

在我看来,我有很多下降但是一旦我知道如何将价值传递给一个下拉意味着我会做另一次下降。

对于编辑,我在sql中创建一个视图,并将该视图作为EDMX文件连接到我的应用程序中。在此视图(表格)中,我拥有访问者表单中的所有字段。该视图名称是View_VisitorsForm。

我的模型(VisitorsViewModel)

    public Nullable<System.DateTime> Date { get; set; }
    public System.Guid VisitingID { get; set; }
    public Nullable<System.Guid> EmployeeID { get; set; }
    public string EmployeeName { get; set; }
    public string Description { get; set; }

我的修改代码

      public ActionResult Edit(Guid ?id)
      {
             WafeERPNEWEntities db = new WafeERPNEWEntities();
        SelectList typelist = new SelectList(db.Employees.ToList(), "EmployeeID", "DisplayName",  db.Employees);
        ViewData["EmployeeName"] = typelist;
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        VisitorsViewModel ObjVisitorsviewModel = new VisitorsViewModel();
        View_VisitorsForm visit = db.View_VisitorsForm.Find(id);
        visit.VisitingID = ObjVisitorsviewModel.VisitingID;
        visit.VisitingDate = ObjVisitorsviewModel.Date;
        visit.Description = ObjVisitorsviewModel.Description;
                 if (ObjVisitorsviewModel == null)
        {
            return HttpNotFound();
        }

        return View(ObjVisitorsviewModel);
    }

我的观看代码

        @Html.LabelFor(model => model.Date)
        @Html.EditorFor(model => model.Date)
        @Html.ValidationMessageFor(model => model.Date)

        @Html.LabelFor(model => model.VisitingID)
        @Html.EditorFor(model => model.VisitingID)
        @Html.ValidationMessageFor(model => model.VisitingID)

        @Html.LabelFor(model => model.EmployeeName)
        @Html.DropDownList("EmployeeID", (IEnumerable<SelectListItem>)ViewData["EmployeeName"])
        @Html.ValidationMessageFor(model => model.EmployeeName)

现在,当我点击编辑按钮时,它会将值传递给此行

    View_VisitorsForm visit = db.View_VisitorsForm.Find(id);

并获得visit.visitingID。但它没有获取viewmodel中的值。所以该值在视图中将为空。所有值都为空VisitingID,描述,日期字段为空,在Employee下拉列表中,它不会显示我传递给此值的值字段显示下拉列表中的第一个值。所以请任何人告诉我如何解决这个问题。实际上我试着按照我的最佳水平解释我的问题,如果你不了解我的问题,或者任何人需要我的完整代码或需要更多代码告诉我。我准备再次更新我的代码。但我需要解决方案。

提前谢谢..

3 个答案:

答案 0 :(得分:0)

使用:

\b\-\d{2}\b(?!\.\d)

重要的部分是&#34; DropDownListFor&#34;。您正在使用&#34; DropDownList&#34;。

答案 1 :(得分:0)

您使用的是DropDownList(...)而不是DropDownListFor(...)

您的模型

您必须添加一个SelectList:

public SelectList Employees { get; set }

您的修改

您必须获取您的员工列表并将其添加到您的模型中:

// Get employees list from the database
var employees = db.Employee.Select(x => x.Id, x.Name).Tolist();

// Put the employees in a SelectList
var selectList = new SelectList(employees .Select(x => new { value = x.Id, text = x.Name }), "value", "text");}).ToList();

// Pass the list to your ViewModel
ObjVisitorsviewModel.Employees = selectList;

您的观点

最后,为此更改DropDownListFor行:

@Html.DropDownListFor(model => model.EmployeeID,
                               model.Employees)

通过使用DropDownList(...),您的对象数据不会绑定到DropDown。您必须手动管理其选定的值。

答案 2 :(得分:0)

使用DropDownListFor辅助方法。

 @Html.DropDownListFor(model => model.EmployeeID,
                                    (IEnumerable<SelectListItem>)ViewData["EmployeeName"])

现在,在您的GET操作中,您需要设置视图模型的EmployeeID属性值。

public ActionResult Edit(int id)
{
  var objVisitorsviewModel = new VisitorsViewModel();
  // I am hard coding to 25. 
  // You may replace it with a valid Employee Id from your db table for the record
  ObjVisitorsviewModel.EmployeeID= 25; 

  return View(objVisitorsviewModel);
}

更干净的解决方案是不使用ViewData 来传输渲染下拉选项所需的数据。只需在视图模型中添加新属性

,即可更加强大地输入代码
public class VisitorsViewModel
{
   public List<SelectListItem> Employees { set;get;}
   public Guid? EmployeeID { get; set; }
   // Your existing properties goes here
}

现在在您的GET操作(创建/编辑)中,我们将加载到Emp enter code here loyees属性,而不是将数据存储在ViewData中。

public ActionResult Edit(int id)
{
  var  vm = new VisitorsViewModel();
  vm.Employees = db.Employees.Select(s=> new SelectListItem { 
                       Value=s.EmployeId.ToString(), Text=s.DisplayName }).ToList();
  return View(vm);
}

在您看来,我们将使用DropDownListFor帮助方法和Employees属性

@model VisitorsViewModel
@using(Html.BeginForm())
{
  @Html.DropDownListFor(s=>s.EmployeeID,Model.Employees,"Select")  
}