我有这个视图模型:
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"];
现在我知道这不是正确的方法,但同时它的工作原理...... 有没有人知道解决这个问题的方法所以它也是一个最好的做法? 谢谢!
答案 0 :(得分:1)
尝试UpdateModel(item, "Item")