尝试更改我的view to PartialView
,我将其与标签系统一起使用,我收到此错误:There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'REGION_ID'.
在_CreateCit.cshtml
文件的第30行:
@model pfebs0.Models.CITOYEN
<h2>Demandeur Info</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
// some code removed (HTML tag)
<div class="form-group">
<label for="REGION_ID" >Region</label>
@Html.DropDownList("REGION_ID", String.Empty)
@Html.ValidationMessageFor(model => model.REGION_ID)
</div>
// some other input tag
<br />
<button type="submit" class="btn btn-default">Valider</button>
<button type="reset" class="btn btn-default">Annuler</button>
</div>
}
这是我的index.cshtml
档案:
@{
ViewBag.Title = "Creation D'un nouveau Demande";
}
<ul class="nav nav-tabs" id="myTab">
<li class="active"><a href="#tab1">Add user tab</a></li>
<li><a href="#tab2">add request tab</a></li>
</ul>
<div class="tab-content">
<div id="tab1" class="tab-pane active">
@Html.Partial("_CreateCit", ViewData)
</div>
<div id="tab2" class="tab-pane">
@Html.Partial("_CreateDM")
</div>
</div>
@section Scripts {
// script Section removed
}
她是我的控制器代码:
public ActionResult CreateCit()
{
ViewData["REGION_ID"] = new SelectList(db.REGION, "REGION_ID", "NOM");
return PartialView("_CreateCit");
}
//
// POST: /Citoyen/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateCit(CITOYEN citoyen)
{
if (ModelState.IsValid)
{
db.CITOYEN.Add(citoyen);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.REGION_ID = new SelectList(db.REGION, "REGION_ID", "NOM", citoyen.REGION_ID);
return PartialView(citoyen);
}
相同的代码使用标准视图,我刚刚将return View
更改为return PartialView(Viewname)
并编辑了cshtml文件。
我想我错过了什么!!
答案 0 :(得分:2)
@Html.Partial
只是呈现局部视图而不会调用控制器操作。它只需要部分视图代码,而无需到达控制器(在动作中设置断点并测试它)。 ViewData
不会包含您认为会包含的数据。您需要使用@Html.Action
:
<div id="tab1" class="tab-pane active">
@Html.Action("CreateCit")
</div>
<div id="tab2" class="tab-pane">
@Html.Action("CreateDM")
</div>
或者,在调用ViewData
之前,尝试在@Html.Partial
对象中明确添加数据:
<div id="tab1" class="tab-pane active">
@{
ViewData["REGION_ID_DDL"] = ViewData["REGION_ID"]
}
@Html.Partial("_CreateCit", ViewData)
</div>
修改强>
要解决有关成功消息的注释:您可以执行几项操作来显示成功消息。我个人最喜欢的是创建一个ResultModel
:
public class ResultModel
{
public string Message { get; set; }
public ResultType TypeOfResult { get; set; }
}
public Enum TypeOfResult
{
Error,
Success
}
创建一个接受ResultModel
的部分视图并显示消息:
@model YourNamespace.Models.ResultModel
<p>Sort du resultat: @Model.TypeOfResult</p>
<p>Message: @Model.Message</p>
然后你就这样称呼它:
if (ModelState.IsValid)
{
db.CITOYEN.Add(citoyen);
db.SaveChanges();
ResultModel resultModel = new ResultModel();
resultModel.TypeOfResult = TypeOfResult.Success;
//my french is a bit rusty but the result from Google Translate sounds good enough
resultModel.Message = "Citoyen ajouté avec succès.";
return PartialView("_ResultSummary", resultModel);
}
当然,这也可用于追踪错误。您可以在try-catch
调用周围添加db.SaveChanges();
,并在try
块中设置成功类型/消息,在catch
块中设置错误类型/消息。
此方法的另一个优点是ResultModel
对象也可以作为JSON字符串发送,以防您想要显示JavaScript&#34; alert&#34;甚至是自定义弹出窗口。