2010-08-21 8 views
0

i ce modèle de vue:ne marche pas ModelState contient VALUES

public class ItemMenuViewModel 
{ 
    public ItemMenu Item { get; set; }   
    public IEnumerable<SelectListItem> Pages { get; set; }  

} 

pour ce point de vue:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SIIMVC.Controllers.ItemMenuViewModel>" %> 
<%@ Import Namespace="SIIMVC.Models.Extensions" %>  
<% using (Ajax.BeginForm("SaveMenuItem",, new { menuItemID = Model.Item.ItemMenuID }, 
       new AjaxOptions { UpdateTargetId = "submitMsg", HttpMethod = "POST", OnSuccess = "MsgUserAndReloadPage" })) 
      { %> 
      <%: Html.ValidationSummary(true)%> 
      <% Html.EnableClientValidation(); %> 

      <fieldset class="allRight"> 
       <legend>עריכת פריט בתפריט</legend> 

       מספר פריט: 
       <%: Model.Item.ItemMenuID%> 

       <br />   

       <div class="editor-label"> 
        שם פריט: 
       </div> 
       <div class="editor-field"> 
        <%: Html.TextBoxFor(model => model.Item.Text)%> 
        <%: Html.ValidationMessageFor(model => model.Item.Text,"yoooooooo")%> 
       </div> 

       <div class="editor-label"> 
        קישור לדף: 
       </div> 
       <div class="editor-field"> 

        <%: Html.DropDownListFor(model => model.Item.PageURL,Model.Pages,"ללא קישור")%> 
        <%: Html.ValidationMessageFor(model => model.Item.PageURL)%> 
       </div>   
       <%-- <%: Html.DropDownList("PageURL",Html.GetPagesSelectList(Model),"ללא קישור"); %>--%> 
       <div class="editor-label"> 
        מיקום הפריט בתפריט.<br /> 
        נא לציין מספר פריט-הורה:<br /> 
        (לקטגוריה ראשית להשאיר ריק) 
       </div> 
       <div class="editor-field"> 
        <%: Html.TextBoxFor(model => model.Item.ParentID)%> 
        <%: Html.ValidationMessageFor(model => model.Item.ParentID)%> 
       </div> 

       <div class="editor-label"> 
       סידור הפריט (ביחס לפריטים אחרים): 
       </div> 
       <div class="editor-field"> 
        <%: Html.TextBoxFor(model => model.Item.OrderNumber)%> 
        <%: Html.ValidationMessageFor(model => model.Item.OrderNumber)%> 
       </div><br /> 
       <%if (HttpContext.Current.User.IsInRole("Site Admin")) 
        { %> 
         שייך עמוד לקטגוריה <br /> 
         <%= Html.DropDownListFor(model => model.Item.CategoryID, new SelectList(Html.GetCategories(), "CategoryID", "CategoryName", Model.Item.CategoryID))%> 
       <%} %><br /><br /> 


       <p> 
        <input type="submit" value="שמור שינויים" id="saveItem" /> <input type="button" value="מחק פריט" id="deleteItem" /> 
       </p> 
       <% } %> 
       <p id="submitMsg"> 
       </p> 
      </fieldset> 

et c'est l'action qui obtient la forme:

// 
    // POST: /Admin/SaveMenuItem/34 
    [HttpPost] 
    public ActionResult SaveMenuItem(int? menuItemID,FormCollection values) 
    { 
     if (!ModelState.IsValid) 
      return Content("טעות בהכנסת נתונים"); 

      MenuModel menu = new MenuModel(); 
      var item = menu.GetItemByID(menuItemID ?? -1); 
      UpdateModel(item); 
      //item.PageURL = db.GetPageByID(item.+".html"; 
      bool success = db.SaveItemMenuToDB(item, false); 

      if (success) 
      { 
       menu.ReloadCache(); 
       return Content("הפריט נשמר בהצלחה"); 
      } 
      else 
       return Content(db.UserMessage); 


    } 

(Désolé pour les messages en hébreu :-D)

le problème: si je regarde dans les valeurs de formCollection je vois les détails de forme, mais pour une raison quelconque la méthode de modèle de mise à jour ne fonctionne pas. J'ai regardé dans les clés modelstate et je vois qu'il a seulement la valeur de route que j'ai passée (menuItemID). mais pourquoi? ne suppose pas pour obtenir toute la collection de formulaire et le mettre à jour?

i essayé aussi passer l'identifiant dans un champ caché de telle sorte que tous les ModelState était vide ...

Des idées?

MISE À JOUR:

j'ai changé cette ligne: UpdateModel (point);

à ceci:

  item.CategoryID =Convert.ToInt32(Request.Form["Item.CategoryID"]); 
      item.OrderNumber = Convert.ToInt32(Request.Form["Item.OrderNumber"]); 
      item.ParentID = Convert.ToInt32(values["Item.ParentID"]); 
      item.Text = Request.Form["Item.Text"]; 
      item.PageURL = Request.Form["Item.PageURL"]; 

Maintenant, je sais que ce n'est pas la façon de le faire droit, mais en attendant, il fonctionne ... que quelqu'un connait un moyen de résoudre ce donc il sera également un meilleur entraine toi ? Merci!

+0

Quelqu'un? Je sais que c'est une solution temporaire juste pour le faire fonctionner et je voudrais encore comprendre l'utilisation de UpdateModel – danfromisrael

Répondre

1

Essayez UpdateModel(item, "Item")

Questions connexes