我在我的C#/ MVC4應用程序中加載了一個局部視圖,其目的是用購物車的基礎知識更新模型。爲什麼我的viewmodel不能更新?
部分視圖更新,但是當我選擇下一個項目並提交時,viewmodel不包含第一次推送的數據。
我有一個類來存儲數據:
public class Selection
{
public class AllItems _AllItems { get; set; }
public int nCounter { get; set; }
public class Resource _Resource { get; set; }
}
我主要觀點有此Ajax表單張貼數據:
@using (Ajax.BeginForm("Index_AddItem", new AjaxOptions { UpdateTargetId = "AddItemList" }))
然後,這是我在工作類局部視圖:
public class AllItems
{
public IEnumerable<SelectListItem> NewItemList { get; set; }
public int ID { get; set; }
public string ItemName { get; set; }
public DateTime dtAddUntil { get; set; }
[Display(Name = "Add Item")]
public List<MyApp.ViewModels.Item> AddItemList = new List<MyApp.ViewModels.Item>();
}
在主視圖和局部視圖上的所有內容都可以正常顯示。
(_AddItems.cshtml)
@model IEnumerable<MyApp.ViewModels.Item>
@{
ViewBag.Title = "Added Items";
}
<h2>Items to be Added</h2>
<table>
<tr>
<th>Item Name</th>
<th>Added until</th>
</tr>
@if (Model != null)
{
foreach (var item in Model)
{
<tr>
<td>Html.DisplayFor(model=>item.ItemName)</td>
<td>Html.DisplayFor(model=>item.EndDate)</td>
</tr>
}
}
</table>
但是當我添加使用項目:
[HttpPost]
public ActionResult Index_AddItem(Resource viewModel, string Text, string Value)
{
Value = Value.Trim();
List<Item> _items = new List<Item>();
string szItemName = GetItem(Convert.ToInt32(Value));
string test = Request.Form.GetValues("cbxPerm")[0].ToString();
Item NewItem = new Item();
NewItem.ItemName = szItemName;
_items.Add(NewItem);
return PartialView("_AddItems", _items);
}
發送給函數的模型是空的。
第一項增加了很多,我在局部視圖中看到它。
但隨後添加刪除以前添加的項目。
當我在AddItem函數中放置一個斷點並查看模型時;沒有什麼。
爲什麼不重新張貼模型?
該模型不應該發佈到部分視圖,因此可以在轉發時訪問它? – DaBlue
敲除岩石。謝謝;我不知道那是存在的。 – DaBlue
您可以在客戶端和服務器之間來回發送viewModel,但這會增加不必要的通信開銷。因此,使用Knockout可以完成客戶端上的所有操作,只需將所有數據保持同步,只上傳和下載必要的數據。 – 3dd