У меня есть проект ASP.NET MVC с объектами на основе EF6 (первая модель). Таким образом, мои сущности автоматически генерируются для меня. У меня есть объект, Site
, и я просто хочу, чтобы пользователь выбирал Site
, прежде чем продолжить. Я пробовал пару способов, все они работают, но они кажутся очень грязными и ненужными.Как передать идентификатор объекта из формы в действие в ASP.NET MVC
мне было интересно о чистейший способ создать DropdownList
из Site
с, а затем получить выбранный участок, когда форма передается (по Id
или любой другой механизм лучше).
В настоящее время у меня есть:
индекс, где пользователю предлагается выбрать сайт:
public ActionResult Index()
{
ViewBag.Sites = new SelectList(db.Sites.ToList(), "Id", "Name");
return View();
}
Вид:
@using (Html.BeginForm("SetSite", "Home"))
{
@Html.Label("sites", "Site:");
@Html.DropDownList("Sites", null, new { @class = "selectpicker" });
<div style="width:100%;height:25px"></div>
<button class="btn btn-default" style="width:100%">Go</button>
}
И SetSite
действие, где форма представленные
[HttpPost]
public ActionResult SetSite()
{
if (Request.Form["Sites"] != null)
{
Session["Site"] = db.Sites.Find(Request.Form["Sites"]);
return RedirectToAction("Home");
}
else
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
}
Некоторые проблемы возникают из-за этого метода. Во-первых, я действительно хотел воспользоваться функциональностью @model
в бритве и указать ее на мой класс Site
, но так как он автогенерирован, я не хочу заглядывать и добавлять целую кучу свойств вида. (нищие не могут быть выбраны?)
Во-вторых, Request.Form['Sites']
возвращает строку, и преобразование ее в int и утка уродливо.
Как я уже говорил, я хотел бы использовать функциональность @model
с Html.DropDownListFor
. Это возможно при работе со списком Sites
из БД?
Как я могу это сделать чисто?
Почему вы не используете ViewModel? –
@HamidMosalla Я не использую модель представления, потому что, когда я смотрю на автогенерируемые представления, созданные визуальной студией, они могут делать то, что я пытаюсь достичь, используя классы первой модели. Другими словами, VS смог использовать только один класс 'Site' для генерации представлений для CRUD. Итак, почему я не могу создать представление для выбора сайта таким же образом? Я хотел бы избежать создания дополнительных классов, если можно, а также продолжить те же дизайнерские паттеры, что и строительные леса. –
Нет необходимости использовать Request.Form для этой простой операции CRUD. Перейдите с помощью @model и следуйте структуре MVC (Model-View-Controller) –