ModelState не содержит значений формы - PullRequest
0 голосов
/ 21 августа 2010

у меня есть эта модель вида:

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

}

для этого вида:

<%@ 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>

и это действие, которое получает форму:

 //
    // 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)

проблема: если я смотрю в значения formCollection, я вижу детали формы, но по какой-то причине метод модели обновления не работает.Я посмотрел в ключах состояния модели, и я вижу, что он получил только значение маршрута, который я передал (menuItemID).но почему?не предполагает ли он получить всю коллекцию форм и обновить ее?

Я также попытался передать идентификатор в скрытое поле, чтобы все состояние модели было пустым ...

Любые идеи?

ОБНОВЛЕНИЕ:

Я изменил эту строку: UpdateModel (item);

на это:

            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"];

Теперь я знаю, что этоне способ сделать это правильно, но в то же время это работает ... кто-нибудь знает способ решить эту проблему, так что это также будет лучшей практикой?Спасибо!

1 Ответ

1 голос
/ 28 сентября 2010

Попробуйте UpdateModel(item, "Item")

...