目前我有这个:
AddEvent.cshtml
@model Evenementor.Models.EvenementorEvent
@{
ViewBag.Title = "Voeg een evenement toe";
}
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))
{
<div class="12u">
@Html.TextBoxFor(m => m.Title, new { @placeholder = "Titel" })
</div>
<div class="12u">
@Html.TextAreaFor(m => m.Description, new { @placeholder = "Omschrijving" })
</div>
<div class="6u">
@Html.TextBoxFor(m => m.Startdate, new { @placeholder = "Startdag" })
</div>
<div class="6u">
@Html.TextBoxFor(m => m.Enddate, new { @placeholder = "Einddag" })
</div>
<div class="12u">
@Html.TextBoxFor(m => m.Location, new { @placeholder = "Locatie" })
</div>
<div class="12u">
<select name="Type">
@foreach (var item in ViewData["Types"] as List<Evenementor.Models.EvenementorType>)
{
<option value="@item.TypeID">@item.Name</option>
}
</select>
</div>
<input type="submit" value="Voeg toe" />
}
DashboardController.cs
// GET: /Dashboard/AddEvent
public ActionResult AddEvent()
{
if (!User.Identity.IsAuthenticated)
{
// User isn't allowed here
Response.Redirect("/");
}
ViewData["Types"] = EvenementorType.GetAllTypes();
return View();
}
// POST: /Dashboard/AddEvent
[HttpPost]
public ActionResult AddEvent(EvenementorEvent ev)
{
if (!User.Identity.IsAuthenticated)
{
// User isn't allowed here
Response.Redirect("/");
}
if (ModelState.IsValid)
{
EvenementorEvent e = new EvenementorEvent();
e.Title = ev.Title;
e.Description = ev.Description;
e.Startdate = ev.Startdate;
e.Enddate = ev.Enddate;
e.Location = ev.Location;
// Register the event
e.Register(e);
// Make a link between event and organisation
EvenementorOrganisationsEvent l = new EvenementorOrganisationsEvent();
l.EventID = e.EventID;
l.OrganisationID = EvenementorOrganisation.GetOrganisationByEmail(User.Identity.Name).OrganisationID;
l.Register(l);
// Link between event and type
EvenementorEventsType ty = new EvenementorEventsType();
ty.EventID = e.EventID;
//GET THE OTHER INFO (Types)
// Redirect
Response.Redirect("/Dashboard/");
}
// Something's wrong!
return View(ev);
}
如何将输入数据从下拉列表返回到控制器?或者还有其他/更好的解决方案吗?
先谢谢,我是ASP.NET的新手。还在自学。
答案 0 :(得分:1)
您提供的代码有2个选项。
将一个Type属性添加到EvenementorEvent类,以便它绑定到它,
public class EvenmentorEvent {
public int Type { get;set; }
}
或..为您的操作添加参数:
public ActionResult AddEvent(EvenementorEvent ev, int type)
下面的人们在他们的答案中付出了更多的努力,确实给了你更正确的“MVC”做事方式。如果您有时间参与他们的示例并实施它们,它们可能会更好地为您服务。根据您的要求。
答案 1 :(得分:1)
ViewData仅用于单程旅行(控制器 - &gt;查看)。如果要将下拉列表中的选定值传递给控制器,则应在模型中创建一个新属性,并在视图中强烈绑定它。
型号 - &gt;
public class EvenementorEvent
{
public string Title { get;set;}
public string Description { get;set;}
....
....
public IEnumerable<System.Web.Mvc.SelectListItem> ListOfData { get;set;}
public string SelectedData { get;set;}
}
控制器 - &gt;
public ActionResult Index()
{
EvenementorEvent ev = new EvenementorEvent();
.............
.............
ev.ListOfData = ( Populate Data - Transform your collection to Collection of
System.Web.Mvc.SelectListItem)
return View(ev);
}
[HttpPost]
public ActionResult AddEvent(EvenementorEvent ev)
{
ev.SelectedData -> The selected value from the dropdown
}
查看 - &gt;
@Html.DropDownListFor(m => m.SelectedData, Model.ListOfData , new { id = "dropdown" })
根据您的要求进行更改。希望它有所帮助。