Главный контроллерКаков правильный способ отправки данных из родительской формы с частичным представлением MVC 4?
public class TestPartialController : Controller
{
//
// GET: /TestPartial/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(Main model)
{
HttpContext.Items.Add("MainModel", model);
return View();
}
public ActionResult PartialA()
{
return PartialView();
}
[HttpPost]
public ActionResult PartialA(PartialA a)
{
if (HttpContext.Items["MainModel"] != null)
{
Main model =(Main) HttpContext.Items["MainModel"];
model.PA = a;
}
return PartialView();
}
public ActionResult PartialB()
{
return PartialView();
}
[HttpPost]
public ActionResult PartialB(PartialB b)
{
if (HttpContext.Items["MainModel"] != null)
{
Main model = (Main)HttpContext.Items["MainModel"];
model.PB = b;
}
SubmitDatatoDB();
return PartialView();
}
public void SubmitDatatoDB()
{
if (HttpContext.Items["MainModel"] != null)
{
Main model = (Main)HttpContext.Items["MainModel"];
//SubmitDatatoDB
}
}
}
Модели: -
namespace TestingMVC4.Models
{
public class Main
{
public string Main1 { get; set; }
public string Main2 { get; set; }
public virtual PartialA PA { get; set; }
public virtual PartialB PB { get; set; }
}
public class PartialA
{
public string UserName { get; set; }
public string UserID { get; set; }
}
public class PartialB
{
public string UserNameB { get; set; }
public string UserIDB { get; set; }
}
}
Вид: -
@model TestingMVC4.Models.Main
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Main</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Main1)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Main1)
@Html.ValidationMessageFor(model => model.Main1)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Main2)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Main2)
@Html.ValidationMessageFor(model => model.Main2)
</div>
<div>
@Html.Action("PartialA","TestPartial")
</div>
<div>
@Html.Action("PartialB","TestPartial")
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
@model TestingMVC4.Models.PartialA
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>PartialA</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.UserID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserID)
@Html.ValidationMessageFor(model => model.UserID)
</div>
</fieldset>
}
Mine Вопрос если это так, то индекс HttpPost основного зрения будет стрелять первым , чем в соответствии с частичным представлением A и частичным представлением B. В этом случае мне нужно сохранить данные в HttpContext.Items и вызвать отправку в базу данных в последнем частичном представлении B.
Что я хочу, это огонь Частичный вид A и B, и сохраните данные в модели Main View и вызовите функцию SubmitDatatoDB в POST-действии Main View.
Спасибо человек. Это действительно помогло. :) –