【问题标题】:ModelState doesnt contains Form valuesModelState 不包含表单值
【发布时间】:2011-04-02 01:50:49
【问题描述】:

我有这个视图模型:

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)。但为什么? 难道不是要获取所有的表单集合并更新它吗?

我还尝试在隐藏字段中传递 id,以便模型状态全部为空...

有什么想法吗?

更新:

我更改了这一行: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"];

现在我知道这不是正确的方法,但同时它可以工作...... 有谁知道解决这个问题的方法,所以这也是一个最佳实践? 谢谢!

【问题讨论】:

  • 有人吗?我知道这是一个临时解决方案,只是为了让它工作,但仍然想了解 UpdateModel 的用法

标签: data-binding asp.net-mvc-2 forms modelstate


【解决方案1】:

试试UpdateModel(item, "Item")

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 2014-03-21
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多