没有布局返回ASP MVC部分视图(Razor)

时间:2013-11-28 12:02:26

标签: c# asp.net asp.net-mvc razor partial-views

标题说明了这一切,所以这里有一些代码:

通过点击按钮调用部分问题:

<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");
    }

2 个答案:

答案 0 :(得分:1)

返回PartialView不会返回带布局的视图。返回视图将呈现布局,并确保_viewstart.cshtml中的布局未设置为null。

答案 1 :(得分:0)

如果ModelState无效,则返回PartialView

if (ModelState.IsValid)
{
  ....
}
return PartialView("_DodajAplikacjeDoUtrzymania", utrzymanie);

DodajAplikacjeDoUtrzymania 查看:

@model List<aplikacja_UtrzymanieAdd>    
@{
  layout = null;
}