2013-11-28 158 views
1

標題說,這一切使這裏的一些代碼:問題ASP MVC PartialView(剃刀)

部分被調用按鈕點擊:

<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> 
} 

Post方法:

[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

返回PartialView如果ModelState中無效

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

DodajAplikacjeDoUtrzymania檢視:

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

return PartialView不會返回佈局視圖。返回視圖將呈現佈局,並確保佈局未在_viewstart.cshtml中設置爲空。