如何在MVC中点击EDIT按钮将DropdownList更改为可编辑的文本框?

我必须在单击“编辑”按钮后将我的下拉列表更改为可编辑的文本框。 这里我在CSHTML文件中有一个Dropdownlist,当我在DDL中选择一个值时,文本框会从表中填充相应的值。

这是我的模特

当我使用ADO.NET实体将表从数据库连接到MVC时,VS会自动生成此Plan_S Model类

public partial class Plan_S { public int PlanId_PK { get; set; } public string PlanNames { get; set; } public string Hours { get; set; } public string PlanCost{ get; set;} 

上市 }

创建此类是为了列出Plan_S类

 public class PlanViewModel { public List Plans { get; set; } } 

我的控制器是

 public class dropdownController : Controller { private PivotEntities db = new PivotEntities(); // // GET: /dropdown/ public ActionResult Index() { var model = new PlanViewModel(); //model.Plan = CurrentPlan; //Replace this with the current plan you're editing model.Plans = db.Plan_S .Select(p => new SelectListItem { Value = p.Hours, Text = p.PlanNames }) .ToList(); return View(model); } protected override void Dispose(bool disposing) { db.Dispose(); base.Dispose(disposing); } } 

我的View文件用于显示下拉列表,TextBox,Edit按钮和Save按钮。

 @model Pivot.Models.PlanViewModel @{ ViewBag.Title = "Index"; } 

Index

@Html.Label("Select Plan : ") @Html.DropDownList("PlanNames", Model.Plans, "--select--")
@Html.Label("Edit Plan : ")
@Html.Label("Hours :")
@Html.Label("Edit :")
@Html.Label("Save Changes :")
$(function () { $("[name='PlanNames']").change(function () { $("#planHours").val($(this).val()); }); $("#plannames").val($(this).val("")); }); $(document).ready(function () { $("#editplan").hide(); $("#Button1").click(function () { $("#ddl").hide(); $("#editplan").show(); }); $("#savebutton").click(function () { $("#editplan").hide(); $("#ddl").show(); }); });

我的Table Plan_S看起来像这样:

  PlanId_PK | PlanNames | Hours | PlanCost 1 Plan1 1hrs $10 2 Plan2 2hrs $20 3 Plan3 3hrs $30 

这里我需要的是,从PlanNmes中选择下拉列表时。

即,)在DDL中选择Plan2时,有两个文本框,一个应填充相应的小时值,另一个文本框应从PlanCost填充。

当我单击“编辑”按钮时,下拉列表和其他两个文本框应该转换为可编辑的文本框,然后我应该编辑计划名,plnacost,小时,然后当我单击“保存”按钮时,它应该保存到Plan_S。

我正在尝试使用JQuery …

由于我是MVC的新手,我感到困惑……

请告诉我……

提前致谢….:)

这需要对ajax进行相当多的修补。 希望你能得到这个想法。

我只是用SelectListItems填充下拉列表,其中Value是Plan_S的主键,就像你通常那样。 这允许您的Plan_S扩展到代码的可伸缩性,并且您将需要更多编辑字段:

 model.Plans = db.Plan_S .Select(p => new SelectListItem { Value = p.PlanId_PK, Text = p.PlanNames }) .ToList(); 

在html中,为id添加一个隐藏字段,以便我们知道我们正在编辑的计划。 我们还需要保存plancost,以便在更新时不会为null。 请注意,我还使用class来隐藏计划字段,因此在隐藏多行时我们有正确的标记:

  Select plan @Html.DropDownList("PlanNames", Model.Plans, "--select--")    @Html.Label("Edit Plan : ")       @Html.Label("Hours :")    @Html.Label("Edit :")    @Html.Label("Save Changes :")   

然后在编辑按钮上单击,我们从服务器请求所选计划并填写编辑字段:

 $("#editbutton").click(function () { $("#ddl").hide(); $(".editplanfield").show(); // Request plan of selected id from server $.getJSON('@Url.Action("GetPlan")', { planId: $("[name='PlanNames']").val() }, function (plan) { // Fill the fields according to the Jsondata we requested $("#planid").val(plan["PlanId_PK"]); $("#plannames").val(plan["PlanNames"]); $("#planHours").val(plan["Hours"]); $("#plancost").val(plan["PlanCost"]); }); }); 

以下是请求的服务器端控制器代码:

  public JsonResult GetPlan(int planId) { var plan = db.Plan_S.Find(planId); return Json(plan, JsonRequestBehavior.AllowGet); } 

现在我们需要保存更改而不回发,因此我们需要更多的ajax:

 $("#savebutton").click(function () { // Parse the plan from fields var plan = new Object(); plan.PlanId_PK = $("#planid").val(); plan.PlanNames = $("#plannames").val(); plan.Hours = $("#planHours").val(); plan.PlanCost = $("#plancost").val() // Post it to server $.ajax({ type: "POST", url: "@Url.Action("UpdatePlan")", success: function (result) { //Postback success $(".editplanfield").hide(); $("#ddl").show(); }, data: plan, accept: 'application/json' }); }); 

然后在服务器端,我们需要更新计划的操作:

  [HttpPost] public JsonResult UpdatePlan(Plan_S plan) { /* Update the plan in database */ /* Just return something for now */ return Json("Success"); }