ASP.NET - MVC - 从另一个模型中获取数据

时间:2014-09-02 23:21:01

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

目前我有这个:

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的新手。还在自学。

2 个答案:

答案 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" })

根据您的要求进行更改。希望它有所帮助。