我正在我的C#/ MVC4应用程序中加载部分视图,其意图是使用购物车的基础知识更新模型。
部分视图更新,但是当我选择下一个项目并提交时,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函数中放置一个断点并查看模型时;里面什么也没有 为什么模型不能重新发布?
答案 0 :(得分:1)
ASP.Net的模型是服务器端,如果需要可以更新的客户端模型等,可以使用Knockout.js或其他客户端MVVM框架
答案 1 :(得分:1)
你真的不能这样做。您每次都在创建一个新列表:
List<Item> _items = new List<Item>();
您需要将此列表保存在某处,然后在每次使用additems函数时获取并添加项目。
或者您将项目客户端和所有内容同时保存到保存它们的位置。
答案 2 :(得分:0)
让我们了解您的代码中发生了什么:
List<Item> _items = new List<Item>();
=&GT;声明类型为Item
的新列表。
string test = Request.Form.GetValues("cbxPerm")[0].ToString();
=&gt;您获得单字符串值&amp;存入本地字符串测试。
Item NewItem = new Item();
=&GT;声明类型为NewItem
的新对象Item
。
string szItemName = GetItem(Convert.ToInt32(Value));
NewItem.ItemName = szItemName;
=&GT;将值从参数value
转换为int到NewItem.ItemName
_items.Add(NewItem);
return PartialView("_AddItems", _items);
=&gt;将对象NewItem
添加到_items
<强>问题强>
List<Item> _items = new List<Item>();
每次都声明新列表&amp;您只在其中添加一个值,删除旧值。
您不使用新变量test
&amp;参数 viewModel
&amp; Text
任何地方。