2014-07-03 35 views
2

我試圖執行的http://www.devcurry.com/2013/01/aspnet-mvc-cascading-dropdown-list.htmlMVC剃刀兩級級聯列表框不會過濾

級聯例子,但運行時,我沒有得到轉化爲成功。我總是得到一個錯誤。我希望有人能夠查看我的代碼。我找不出錯誤在哪裏。

型號

//LineMaintenance.cs 
namespace SchneiderDMS.Models 
{ 
using System; 
using System.Collections.Generic; 

public partial class LineMaintenance 
{ 
    public int ID { get; set; } 
    public Nullable<int> LineID { get; set; } 
    public Nullable<System.DateTime> StartTime { get; set; } 
    public Nullable<System.DateTime> AcknowlegeTime { get; set; } 
    public Nullable<System.DateTime> EndTime { get; set; } 
    public Nullable<int> TypeOfProblemID { get; set; } 
    public Nullable<int> ProblemID { get; set; } 
    public string ProblemDescription { get; set; } 
    public virtual Line Line { get; set; } 
    public virtual Problem Problem { get; set; } 
    public virtual TypeOfProblem TypeOfProblem { get; set; } 
} 
} 


//Problem.cs 
namespace SchneiderDMS.Models 
{ 
using System; 
using System.Collections.Generic; 

public partial class Problem 
{ 
    public Problem() 
    { 
     this.LineMaintenances = new HashSet<LineMaintenance>(); 
    } 

    public int ID { get; set; } 
    public Nullable<int> TypeOfProblemID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<LineMaintenance> LineMaintenances { get; set; } 
    public virtual TypeOfProblem TypeOfProblem { get; set; } 
} 
} 


//TypeOfProblem.cs 
namespace SchneiderDMS.Models 
{ 
using System; 
using System.Collections.Generic; 

public partial class TypeOfProblem 
{ 
    public TypeOfProblem() 
    { 
     this.LineMaintenances = new HashSet<LineMaintenance>(); 
     this.Problems = new HashSet<Problem>(); 
    } 

    public int ID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<LineMaintenance> LineMaintenances { get; set; } 
    public virtual ICollection<Problem> Problems { get; set; } 
} 
} 

視圖 - Create.cshtml

<div class="col-md-4"> 
    @Html.LabelFor(model => model.TypeOfProblemID, "TypeOfProblemID", htmlAttributes: new { @class = "control-label", @style = "margin-bottom:10px" }) 
    @Html.ListBox("TypeOfProblemID", null, htmlAttributes: new { @class = "form-control", @style = "height:150px" }) 
    @Html.ValidationMessageFor(model => model.TypeOfProblemID, "", new { @class = "text-danger" }) 
</div> 
<div class="col-md-4"> 
    @Html.LabelFor(model => model.ProblemID, "ProblemID", htmlAttributes: new { @class = "control-label", @style = "margin-bottom:10px" }) 
    @Html.ListBox("ProblemID", null , htmlAttributes: new { @class = "form-control", @style = "height:150px" }) 
    @Html.ValidationMessageFor(model => model.ProblemID, "", new { @class = "text-danger" }) 
</div> 

@section Scripts { 
@Scripts.Render("~/bundles/jqueryvalc") 
<script> 
$(document).ready(function() 
{ 
    //Dropdownlist Selectedchange event 
    $("#TypeOfProblemID").change(function() 
    { 
     $("#ProblemID").empty(); 
     $.ajax({ 
      type:'POST', 
      url: '@Url.Action("SelectProblems")', 
      dataType: 'json', 
      data: { id: $("#TypeOfProblemID").val() }, 
      success: function (Problems) 
      { 
       // Problems contains the JSON formatted list 
       // of Problems passed from the controller 
       $.each(Problems, function (i, Problem) 
       { 
        $("#ProblemID").append('<option value="' 
        + Problem.ID + '">' 
        + Problem.Name + '</option>'); 
       }); 
      }, 
      error: function (ex) 
      { 
       alert('Failed to retrieve Problems.' + ex); 
      } 
     }); 
     return false; 
    }) 
}); 
</script> 
} 

控制器 - LineMaintenance.cs

// GET: LineMaintenances/Create 
    public ActionResult Create() 
    { 
     ViewBag.LineID = new SelectList(db.Lines, "ID", "Name"); 
     ViewBag.ProblemID = new SelectList(db.Problems, "ID", "Name"); 
     ViewBag.TypeOfProblemID = new SelectList(db.TypeOfProblems, "ID", "Name"); 
     return View(); 
    } 

    //Returns Json Result 
    public JsonResult SelectProblems(int id) 
    { 
     db.Configuration.ProxyCreationEnabled = false; 
     IEnumerable<Problem> Problems = db.Problems.Where(p => p.TypeOfProblemID == id); 
     return Json(Problems); 
    } 

    // POST: LineMaintenances/Create 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Create([Bind(Include = "ID,LineID,StartTime,AcknowlegeTime,EndTime,TypeOfProblemID,ProblemID,ProblemDescription")] LineMaintenance lineMaintenance) 
    { 
     if (ModelState.IsValid) 
     { 
      db.LineMaintenances.Add(lineMaintenance); 
      await db.SaveChangesAsync(); 
      return RedirectToAction("Index"); 
     } 

     ViewBag.LineID = new SelectList(db.Lines, "ID", "Name", lineMaintenance.LineID); 
     // ViewBag.ProblemID = new SelectList(db.Problems, "ID", "Name", lineMaintenance.ProblemID); 
     ViewBag.TypeOfProblemID = new SelectList(db.TypeOfProblems, "ID", "Name", lineMaintenance.TypeOfProblemID); 
     return View(lineMaintenance); 
    } 

回答

0

在你的代碼當你返回json結果修改它如下

public JsonResult SelectProblems(int id) 
{ 
    db.Configuration.ProxyCreationEnabled = false; 
    IEnumerable<Problem> Problems = db.Problems.Where(p => p.TypeOfProblemID == id); 
    return Json(Problems,JsonRequestBehavior.AllowGet); 
} 
+0

它仍然是一樣的 – user3758689

+0

你可以報價你的錯誤PLZ ??? –