我这里有一个页面,显示两个班级组 - 学生组/列表 - 您可以选择一些=>点击按钮=>选定的学生改变班组。
默认情况下,第一个班组在另一个页面中被选中,第二个学生列表是尚未拥有班级组的学生。
现在我想添加一个包含数据库中所有类组的下拉列表,然后用户(教师)可以选择一个,第二个类列表将更改为所选的类组。
问题是我似乎无法在我的控制器中获得所选的类组(我对mvc3很新,我是应用信息学的第二年,我们没有获得书籍/课程在这方面,我似乎无法让它工作)
Controlleraction(DocentController):
public ViewResult ToonStudenten(string id) //id = klasnaam
{
var GeselecteerdeKlas = StudentRepo.getStudentenByKlas(id);
var TweedeKlas = StudentRepo.getStudentenZonderKlas();
var AlleKlassen = KlasRepo.FindAllKlasNaam();
var KlasNaam = id;
ViewBag.EersteKlas = id;
ViewBag.TweedeKlas = "Deze studenten kregen nog geen klas toegewezen, gelieve de studenten die u naar klas" + id + " wil verzetten te selecteren";
return View(new ToonStudentenModel(GeselecteerdeKlas, TweedeKlas, AlleKlassen, KlasNaam));
}
[HttpPost, ActionName("ToonStudenten")]
public ActionResult VeranderStudentenKlas(string[] deleteInputsKlas1, string[] deleteInputsKlas2, string id, string id2)//, string klasnaam1, string opdrachtID)
{
//TODO: Lijsten worden goed mee gegeven, klasnaam nog NIET (= null)
if (deleteInputsKlas2 == null && deleteInputsKlas1 == null)
{
ModelState.AddModelError("", "Er werden geen Studenten geselecteerd");
return RedirectToAction("ToonStudenten", "Docent", new { id = id });
}
foreach (var item in deleteInputsKlas1)
{
try
{
StudentRepo.VeranderKlas(item, null);
}
catch (Exception er)
{
ModelState.AddModelError("", "Failed on ID " + item + " : " + er.Message);
return View("error");
}
}
foreach (var item in deleteInputsKlas2)
{
try
{
StudentRepo.VeranderKlas(item, id);
}
catch (Exception er)
{
ModelState.AddModelError("", "Failed on ID " + item + " : " + er.Message);
return View("error");
}
}
StudentRepo.SaveChanges();
return RedirectToAction("ToonStudenten", "Docent", new { id = id });
}
}
}
视图模型
{
public class ToonStudentenModel
{
public IEnumerable<Student> EersteKlas { get; set; }
public IEnumerable<Student> TweedeKlas { get; set; }
public IEnumerable<Student> GeselecteerdUitEersteKlas { get; set; }
public IEnumerable<Student> GeselecteerdUitTweedeKlas { get; set; }
public IEnumerable<string> KlassenDropDown { get; set; }
public string KlasNaam { get; set; }
public string geselecteerdeKlasUitDropDown { get; set; }
public ToonStudentenModel(IEnumerable<Student> GeselecteerdeKlas,
IEnumerable<Student> AndereKlasOfStudZonderKlas, IEnumerable<string> KlassenDropDown, string KlasNaam)
{
EersteKlas = GeselecteerdeKlas;
TweedeKlas = AndereKlasOfStudZonderKlas;
this.KlassenDropDown = KlassenDropDown;
this.KlasNaam=KlasNaam;
}
}
}
查看:
@using (Html.BeginForm(new { id = Model.KlasNaam } ))
{
<div>
@Html.ValidationSummary()
</div>
<div style="float:right;">
<input type="submit" value="Delete Selected Values" />
</div>
<h2>Index</h2>
<div>Studenten @ViewBag.EersteKlas</div>
<table>
<tr>
<th></th>
<th></th>
<th>
Studentennummer
</th>
<th>
Voornaam
</th>
<th>
Naam
</th>
</tr>
@foreach (var item in Model.EersteKlas)
{
<tr>
<td>
<input type="checkbox" name="deleteInputsKlas1" value="@item.StudentID" />
</td>
<td>
@Html.ActionLink("Details", "Details", new { id = item.StudentID }) |
</td>
<td>
@item.StudentID
</td>
<td>
@item.Voornaam
</td>
<td>
@item.Naam
</td>
</tr>
}
</table>
@ViewBag.TweedeKlas
<table>
<tr>
<th></th>
<th></th>
<th>
Studentennummer
</th>
<th>
Voornaam
</th>
<th>
Naam
</th>
</tr>
@foreach (var item in Model.TweedeKlas)
{
<tr>
<td>
<input type="checkbox" name="deleteInputsKlas2" value="@item.StudentID" />
</td>
<td>
@Html.ActionLink("Details", "Details", new { id = item.StudentID }) |
</td>
<td>
@item.StudentID
</td>
<td>
@item.Voornaam
</td>
<td>
@item.Naam
</td>
</tr>
}
</table>
<input type="hidden" name="id" value = @Model.KlasNaam />
<input type="hidden" name="id1" value = @Model.opdrachtID />
<div>OF: Kies een andere klas om studenten in klas @Model.KlasNaam te steken:
@Html.DropDownListFor(model => Model.KlassenDropDown, new SelectList(Model.KlassenDropDown))
</div>
}
<div>
@Html.ActionLink("Terug naar uw klassen", "ToonKlassen", new{id = Model.opdrachtID });
</div>
答案 0 :(得分:1)
我尝试使用ajax。您必须通过javascript执行此操作,但在您的控制器中它看起来像这样:
[HttpPost]
public JsonResult lookup(int groupNumber)
然后控制器可以返回新的学生列表以填充第二个下拉列表。 希望这有帮助
答案 1 :(得分:0)
最终没有使用Ajax,只是将对象通过表单传递给post方法并使用if if那里
查看
@Html.DropDownListFor(model => Model.geselecteerdeKlasUitDropDown, new SelectList(Model.KlassenDropDown), "--Zonder klas--")
控制器:
[HttpPost, ActionName("ToonStudenten")]
public ActionResult VeranderStudentenKlas(string[] deleteInputsKlas1, string[] deleteInputsKlas2, string id, int id1, string geselecteerdeKlasUitDropDown, string searchpara1, string searchpara2)// id = klasnaam1, id1 = opdrachtID, id2 = klasgroep2)
{
if (deleteInputsKlas2 == null && deleteInputsKlas1 == null)
{
ModelState.AddModelError("", "Er werden geen Studenten geselecteerd");
return RedirectToAction("ToonStudenten", "Docent", new { id = id, id1 = id1, geselecteerdeKlasUitDropDown = geselecteerdeKlasUitDropDown, searchpara1 = searchpara1, searchpara2 = searchpara2 });
}
if (deleteInputsKlas1 != null)
foreach (var item in deleteInputsKlas1)
{
try
{
if (geselecteerdeKlasUitDropDown == "")
StudentRepo.VeranderKlas(item, null);
else
StudentRepo.VeranderKlas(item, geselecteerdeKlasUitDropDown);
}
catch (Exception er)
{
ModelState.AddModelError("", "Fout bij Student met ID " + item + " : " + er.Message);
return View("error");
}
}
if (deleteInputsKlas2 != null)
foreach (var item in deleteInputsKlas2)
{
try
{
StudentRepo.VeranderKlas(item, id);
}
catch (Exception er)
{
ModelState.AddModelError("", "Failed on ID " + item + " : " + er.Message);
return View("error");
}
}
StudentRepo.SaveChanges();
return RedirectToAction("ToonStudenten", "Docent", new { id = id, id1 = id1, geselecteerdeKlasUitDropDown = geselecteerdeKlasUitDropDown, searchpara1 = searchpara1, searchpara2 = searchpara2 });