2014-04-29 2 views
0

Я загружаю частичный вид в моем приложении C#/MVC4 с намерением обновить модель с помощью основы корзины покупок.Почему мой модем не обновляется?

Частичный просмотр обновляется, но когда я выбираю следующий элемент и отправляю, модель просмотра не содержит данные, которые были нажаты в первый раз.

У меня есть класс для хранения данных:

public class Selection 
{ 
    public class AllItems _AllItems { get; set; } 
    public int nCounter { get; set; } 
    public class Resource _Resource { get; set; } 
} 

Мой главный вид имеет этот АЯКС форму, чтобы отправить данные:

   @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>(); 
} 

Все отображает ok на главном экране и частичном изображении.

(_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 и смотрю на модель; в этом ничего нет.
Почему модель не возвращается повторно?

ответ

1

Модели для ASP.Net являются на стороне сервера, если вам нужны боковые модели клиента, которые могут быть обновлены и т.д. Вы можете использовать Knockout.js или другой стороне клиента MVVM рамки

+0

Не должна ли модель быть отправлена ​​на частичный вид, чтобы ее можно было получить при отправке? – DaBlue

+0

Нокаутом пород. Благодаря; Я понятия не имел, что существует. – DaBlue

+0

Вы можете опубликовать viewModel взад и вперед между клиентом и сервером, но это лишние затраты на связь. Таким образом, используя Knockout вы можете делать все на клиенте и просто держать все в синхронизации, отправляя только необходимые данные вверх и вниз. – 3dd

1

Вы не можете это сделать как это. Вы создаете новый список каждый раз:

List<Item> _items = new List<Item>(); 

Вы должны сохранить этот список где-нибудь, а затем взять его и добавлять элементы к нему, когда вы используете AddItems работать каждый раз.

Либо это, либо вы сохраняете элементы на стороне клиента и в столбце в одно и то же время где-то, где они сохраняются.

+0

Итак, модель не размещена? Где я могу сохранить это? Должен ли я правильно сказать, когда будет размещена основная форма, что эти данные также не будут присутствовать? – DaBlue

+0

Я не уверен, какой ресурс viewModel даже делает в вашей функции там ... он, похоже, не используется вообще. Вы отправляете значения из своего Ajax.BeginForm? Ничего, что вы добавите через функцию AddItem, будет присутствовать в вашей модели в основной форме, модели не будут передаваться по ссылке в формах, они просто передают/получают значения, которые автоматически связаны с моделью. – JuhaKangas

0

Давайте понять, что происходит в вашем коде:

  • List<Item> _items = new List<Item>();

    => объявить новый список типа Item.

    • В string test = Request.Form.GetValues("cbxPerm")[0].ToString();

    => вы получаете единственное строковое значение & магазин в местном тест строки.

    • Item NewItem = new Item();

    => объявлен новый объект NewItem типа Item.

    • string szItemName = GetItem(Convert.ToInt32(Value)); NewItem.ItemName = szItemName; => присвоить значение преобразуется в целое от параметра value к NewItem.ItemName

    • _items.Add(NewItem); return PartialView("_AddItems", _items);

    => Добавить объект NewItem к _items

Проблемы

  • List<Item> _items = new List<Item>(); объявляет новый список каждый раз, когда & вы добавляете только одно значение в нем, так старые значения удаляются.

  • Вы не использует новую переменную test & параметры viewModel & Text в любом месте.

+0

Это я понимаю ... То, что я имею в виду, это viewmodel, который возвращается в (Resource viewModel), полностью пуст ... Я ожидал увидеть список, который я отправил раньше ... – DaBlue

+0

Я ожидал увидеть предыдущий список, который был отправлен на частичный просмотр, чтобы я мог развернуть и повторно отправить его частичное представление. – DaBlue

Смежные вопросы