标题说明了这一切,所以这里有一些代码:
通过点击按钮调用部分问题:
<div class="red">@ViewData["komunikat"]</div><br />
<p>
@if (serwisUser.isAdmin || serwisUser.isUtrzymanie)
{
<input type="submit" name="btnUtrzymania" id="WybierzUtrzymania" value="Wprowadź nowe warunki dla zaznaczonych utrzymań" />
<input id="txtIlosc" type="text" style="width: 20px; " value="1"/>
<input type="button" name="btnUtrzymania" onclick="javascript:dodajAplikacje();" id="DodajAplikacje" value="Dodaj aplikację do utrzymań" />
}
</p>
dodajAplikacje()函数:
function dodajAplikacje()
{
var klientID = '@ViewData["klientID"].ToString()';
var ilosc = $("#txtIlosc").val();
if (klientID != "")
{
$('#listaAplikacji').load('/Utrzymania/_DodajAplikacjeDoUtrzymania/' + klientID + '/' + ilosc);
}
else
{
("Proszę wybrać klienta");
}
}
这会以可编辑的形式加载部分视图,在保存未通过验证的更改后,将返回部分视图,其中包含用户的输入。所以没什么特别的。问题是,如果验证失败,则返回部分视图而不显示父视图和布局,只返回带有简单表格的白页。
部分观点:
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Ajax.BeginForm("_DodajAplikacjeDoUtrzymania", "Utrzymania", new AjaxOptions { UpdateTargetId = "listaAplikacji", InsertionMode = InsertionMode.Replace }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Dodaj aplikację do utrzymań</legend>
<div id="ListaUtrzyman" class="t-widget t-grid">
<table id="utrzymania" cellspacing="0">
<thead class="t-grid-header">
<tr>
<th rowspan="2" class="t-header">
Nazwa Aplikacji
</th>
<th colspan="2" class="t-header_rowspan">
Okres obowiązywania nowej umowy
</th>
<th colspan="3" class="t-header_rowspan">
Czas realizacji SLA [w dniach]
</th>
<th rowspan="2" class="t-header">
Komentarz do umowy
</th>
</tr>
<tr>
<th class="t-header_rowspan2">
Rozpoczęcie
</th>
<th class="t-header_rowspan2_last">
Wygaśnięcie
</th>
<th class="t-header_rowspan2">
Krytyczne
</th>
<th class="t-header_rowspan2">
Zwykłe
</th>
<th class="t-header_rowspan2_last">
Zadania
</th>
</tr>
</thead>
@{int i = 0;
}
@foreach (var item in Model)
{
<tr>
<td>
@Html.DropDownList("[" + i + "].aplikacjaID", (List<SelectListItem>)ViewData["listaAplikacji"])
@Html.ValidationMessageFor(m => m[i].aplikacjaID)
@Html.HiddenFor(m => m[i].klientID)
</td>
<td>
@Html.Telerik().DatePickerFor(m => m[i].dataWprowadzenia).ShowButton(true).Format("yyyy-MM-dd").Name("[" + i + "].dataWprowadzenia").HtmlAttributes(new { @id = i + "-dataWprowadzenia" }).Value(DateTime.Now)
@Html.ValidationMessageFor(m => m[i].dataWprowadzenia)
@if (i == 0 && Model.Count > 1)
{ <input type="image" onclick="PowielKrytyczne('dataWprowadzenia'); return false;" alt="Powiel" src="../../Content/images/down arrow.png" style="width: 16px; float: right;" /> }
</td>
<td>
@Html.Telerik().DatePickerFor(m => m[i].dataWygasniecia).ShowButton(true).Format("yyyy-MM-dd").Name("[" + i + "].dataWygasniecia").HtmlAttributes(new { @id = i + "-dataWygasniecia" }).Value(DateTime.Now.AddYears(1))
@Html.ValidationMessageFor(m => m[i].dataWygasniecia)
@if (i == 0 && Model.Count > 1)
{ <input type="image" onclick="PowielKrytyczne('dataWygasniecia'); return false;" alt="Powiel" src="../../Content/images/down arrow.png" style="width: 16px; float: right;" /> }
</td>
@* <td>
@Html.CheckBoxFor(m => m[i].czySLA, new { @id = i + "-czySLA" })
@if (i == 0 && Model.Count > 1)
{ <input type="image" onclick="PowielCheckBox('czySLA'); return false;" alt="Powiel" src="../../Content/images/down arrow.png" style="width: 16px; float: right;" /> }
</td>*@
<td>
@Html.TextBoxFor(m => m[i].czasKrytyczny, new { @style = "width:50px", @id = i + "-czasKrytyczny", @class = "number" })
@Html.ValidationMessageFor(m => m[i].czasKrytyczny)
@if (i == 0 && Model.Count > 1)
{ <input type="image" onclick="PowielKrytyczne('czasKrytyczny'); return false;" alt="Powiel" src="../../Content/images/down arrow.png" style="width: 16px; float: right;" /> }
</td>
<td>
@Html.TextBoxFor(m => m[i].czasNormalny, new { @style = "width:50px", @id = i + "-czasNormalny", @class = "number" })
@Html.ValidationMessageFor(m => m[i].czasNormalny)
@if (i == 0 && Model.Count > 1)
{ <input type="image" onclick="PowielKrytyczne('czasNormalny'); return false;" alt="Powiel" src="../../Content/images/down arrow.png" style="width: 16px; float: right;" /> }
</td>
<td>
@Html.TextBoxFor(m => m[i].czasZadanie, new { @style = "width:50px", @id = i + "-czasZadanie", @class = "number" })
@Html.ValidationMessageFor(m => m[i].czasZadanie)
@if (i == 0 && Model.Count > 1)
{ <input type="image" onclick="PowielKrytyczne('czasZadanie'); return false;" alt="Powiel" src="../../Content/images/down arrow.png" style="width: 16px; float: right;" /> }
</td>
<td>
@Html.TextAreaFor(m => m[i].komentarz, new { @id = i + "-komentarz" })
@if (i == 0 && Model.Count > 1)
{ <input type="image" onclick="PowielKrytyczne('komentarz'); return false;" alt="Powiel" src="../../Content/images/down arrow.png" style="width: 16px; float: right;" /> }
</td>
</tr>
i++;
}
</table>
</div>
<p>
<input type="submit" id="ZapiszZmiany" value="Zapisz" disabled="disabled"/>
<input type="button" id="PowrotDoListy" value="Powrót do listy utrzymań" />
</p>
</fieldset>
}
发布方法:
[Authorize]
[HttpPost]
public ActionResult _DodajAplikacjeDoUtrzymania(List<aplikacja_UtrzymanieAdd> utrzymanie)
{
serwisLoggedUser serwisUser = (serwisLoggedUser)Session["serwisUser"];
if (serwisUser.isAdmin || serwisUser.isUtrzymanie)
{
ViewData["DodajUtrzymanie"] = @"class = selected";
ViewData["czyWyswietlac"] = @"style = display:none;";
string listaNowychAplikacji = string.Empty;
Guid klientId;
if(Session["klientId"] != null || Session["klientIdListaUtrzyman"] != null)
klientId = (Guid)(Session["klientId"] ?? Session["klientIdListaUtrzyman"]);
else
return PartialView("_404");
ViewData["listaAplikacji"] = listaAplikacji(klientId);
if (ModelState.IsValid)
{
using (serwisCurrendaEntities entites = new serwisCurrendaEntities())
{
foreach (aplikacja_UtrzymanieAdd utrz in utrzymanie)
{
serwis_Utrzymanie noweUtrzymanie = new serwis_Utrzymanie();
noweUtrzymanie.aplikacjaID = utrz.aplikacjaID;
noweUtrzymanie.czasKrytyczny = utrz.czasKrytyczny;
noweUtrzymanie.czasNormalny = utrz.czasNormalny;
noweUtrzymanie.czasZadanie = utrz.czasZadanie;
noweUtrzymanie.czySLA = utrz.czySLA;
noweUtrzymanie.czyUs = false;
if (utrz.dataWprowadzenia == null)
{
noweUtrzymanie.dataWprowadzenia = utrz.dataKoncaUtrzymania.Value;
}
else
{
noweUtrzymanie.dataWprowadzenia = utrz.dataWprowadzenia.Value;
}
noweUtrzymanie.dataWygasniecia = utrz.dataWygasniecia;
noweUtrzymanie.klientID = klientId;
noweUtrzymanie.komentarz = utrz.komentarz;
entites.AddToserwis_Utrzymanie(noweUtrzymanie);
listaNowychAplikacji += noweUtrzymanie.serwis_Aplikacje.nazwaAplikacji + ", ";
TempData["klient"] = entites.serwis_Klienci.Where(k => k.klientID == klientId).FirstOrDefault().nazwa;
TempData["klientID"] = klientId;
Logger.Instance.AddLog("serwisCurrendaAdministrator.Controllers.UtrzymaniaController._DodajAplikacjeDoUtrzymania", Level.Info, String.Format("Użytkownik domenowy {0} dla klienta {1} dodał nowe utrzymanie dla {2}: rozpoczęcie {3}, wygaśnięcie {4}.", User.Identity.Name, TempData["klient"], noweUtrzymanie.serwis_Aplikacje.nazwaAplikacji, noweUtrzymanie.dataWprowadzenia, noweUtrzymanie.dataWygasniecia));
}
entites.SaveChanges();
TempData["Message"] = "Dodano utrzymania!";
return RedirectToAction("ListaUtrzyman", new { klientID = klientId });
}
}
return View("_DodajAplikacjeDoUtrzymania", utrzymanie);
}
return PartialView("_403");
}
答案 0 :(得分:1)
返回PartialView不会返回带布局的视图。返回视图将呈现布局,并确保_viewstart.cshtml中的布局未设置为null。
答案 1 :(得分:0)
如果ModelState无效,则返回PartialView
if (ModelState.IsValid)
{
....
}
return PartialView("_DodajAplikacjeDoUtrzymania", utrzymanie);
DodajAplikacjeDoUtrzymania 查看:
@model List<aplikacja_UtrzymanieAdd>
@{
layout = null;
}