У меня на самом деле нет хорошего примера для этого, главным образом потому, что я просто прикрываю его, и до сих пор мой код - это просто перепутанный мишень из gobble-dee-gook. Я в недоумении и нуждаюсь в помощи или совете по этому поводу. Вот что мне нужно:MVC4 Создание регистрационных страниц с использованием одной модели
Я создаю макет регистрационная форма предназначена только для учебных целей. В качестве примера я использовал форму заявки . На одной странице есть личная информация заявителя, такая как имя и фамилия, возраст, пол и уровень образования. Вторая страница позволяет им выбирать, на какую позицию они хотят подать заявку, и позволяет им предоставлять список навыков. У меня есть один model
, настроенный на data
и save
до database
. На первой странице будет ajax
следующая кнопка, которая заменяет форму первой страницы на вторую форму. На второй странице есть две кнопки, Назад и Отправить (достаточно простые), которые также являются ajax-y
. Моя проблема прямо сейчас получает data
из обеих форм, чтобы сохранить до entry
в model
. У кого-нибудь есть простой пример или ссылка, на которую я мог бы обратить внимание на такую ситуацию? Или, может быть, еще один способ обойти это? Было бы очень полезно! :)
Модель
public int Id { get; set; }
[Required(ErrorMessage = "First name Req")]
[Display(Name = "First name")]
public string First { get; set; }
[Required(ErrorMessage = "Last name Req")]
[Display(Name = "Last name")]
public string Last { get; set; }
[Required(ErrorMessage = "Age Req")]
[Range(18, 75, ErrorMessage = "Age Range of {1}-{2}")]
public int Age { get; set; }
[Required(ErrorMessage = "Please Select Gender")]
public string Gender { get; set; }
[Required(ErrorMessage = "Education Level Req")]
public string Education { get; set; }
public string Position { get; set; }
public string Skills { get; set; }
Контроллер
[HttpGet]
public PartialViewResult Apply1()
{
var model = db.Applications.Find(id);
if (model != null)
{
return PartialView("_Apply1", model);
}
return PartialView("_Apply1");
}
[HttpPost]
public PartialViewResult Apply1(Application app)
{
if (Request.IsAjaxRequest())
{
if (db.Applications.Where(a => a.First.ToLower() == app.First.ToLower() && a.Last.ToLower() == app.Last.ToLower() && a.Age == app.Age && a.Gender == app.Gender && a.Education == app.Education).Count() == 0)
{
app.Position = "x";
db.Applications.Add(app);
db.SaveChanges();
}
else
{
app = db.Applications.Single(a => a.First.ToLower() == app.First.ToLower() && a.Last.ToLower() == app.Last.ToLower() && a.Age == app.Age && a.Gender == app.Gender && a.Education == app.Education);
}
PosList(); //This is a helper Method, get's values for a dropdown list
id = app.Id;
var model = db.Applications.Find(id);
return PartialView("_Apply2", model);
}
return PartialView("_Apply1", app);
}
[HttpGet]
public PartialViewResult Apply2()
{
var model = db.Applications.Find(id);
if (model != null)
{
return PartialView("_Apply2", model);
}
return PartialView("_Apply2");
}
[HttpPost]
public PartialViewResult Apply2(Application app)
{
if (ModelState.IsValid)
{
db.Entry(app).State = EntityState.Modified;
db.SaveChanges();
ModelState.Clear();
return PartialView("_Success");
}
PosList();
return PartialView("_Apply2", app);
}
Первый взгляд
@model SiPrac.Models.Application
@using (Ajax.BeginForm("Apply1", new AjaxOptions()
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "appForm"
}))
{
@Html.AntiForgeryToken()
<div class="editor-label">
@Html.LabelFor(model => model.First)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.First)
@Html.ValidationMessageFor(model => model.First)
</div>
<div class="clear"></div>
<div class="editor-label">
@Html.LabelFor(model => model.Last)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Last)
@Html.ValidationMessageFor(model => model.Last)
</div>
<div class="clear">
<input class="btn" type="submit" value="Next" />
}
Second View
@using (Ajax.BeginForm("Apply2", new AjaxOptions()
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "appForm"
}))
{
@Html.AntiForgeryToken()
<div class="editor-label">
@Html.LabelFor(model => model.Position)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Position, (IEnumerable<SelectListItem>)ViewData["selectPos"])
</div>
<div class="clear"></div>
<input class="btn" type="submit" value="Submit" />
}
Показать, что у вас есть, вы может включать одно поле из каждой формы, поэтому вам не нужно публиковать много кодов в своем вопросе. Кроме того, разместите модель, которая у вас есть. Но в основном вы можете передавать входные данные в модель через ajax. –
Что я до сих пор добавил. – SiSan
Вы сказали, что хотите передать все поля из двух форм, но здесь вы показываете два метода отправки. Итак, вы намерены передать все поля из двух форм на каждый из этих почтовых методов - не имеет смысла? –