如何修改视图中的列表项(在视图中添加/删除列表项)

时间:2015-09-22 17:43:52

标签: c# asp.net-mvc razor

我有一个视图,显示基于他们搜索的PO的订单项列表,从文档中提取。一旦视图加载了底部的订单项,我就会得到一个" x"条目旁边的按钮,但不了解如何在不重新加载页面的情况下对视图项执行操作。

基本上,当用户完成"删除"行项目,我希望他们提交,然后表单将被放回到一起,但只是在视图上留下的行。

(注意:使用Filehelpers来解析空间分隔的文件,这就是为什么有额外的运行和流和字符串的原因。另请注意;新的!)

班级 -

namespace WebDocumentEditor
{
    public class LineItemListInfo
    {
        public string asiLineNumber { get; set; }
        public string itemSKU { get; set; }
        public string itemQTY { get; set; }
        public string itemUOM { get; set; }
        public string itemPrice { get; set; }

    }
}

控制器构建列表:

public ActionResult SearchForPODocument(string POinput)
        {
            string contents = string.Empty;
            if (POinput == "" | POinput == null)
            {
                return RedirectToAction("Index");               
            }
            LoadConfigValues();
            foreach (string file in Directory.GetFiles(exportsArchive))
            {
                using (var stream = new StreamReader(file))
                {
                    contents = stream.ReadToEnd().ToString();
                    if (contents.Contains(POinput))
                    {

                        SendPOfor850Trim(contents, POinput);
                        ViewBag.DocumentWithPO = documentWithPO;
                        SendFoundPOForASIHDRParse(documentWithPO);
                        SendFoundPOForASISTAParse(documentWithPO);
                        SendFoundPOForASILINParse(documentWithPO);
                        break;                    
                    }
                }
            }
            ViewBag.PoNotFound = "PO Not Found";
            return View();

        }


//Helper Method to break up info from ASISLIN Line
    public void SendFoundPOForASILINParse(string documentWithPO)
    {
        var engine = new FileHelperEngine<ParseASILIN>();
        var result = engine.ReadString(documentWithPO);


        foreach (ParseASILIN parse in result)
        {
            if (parse.lineID.Contains("ASILIN"))
            {
                //action on ASILIN line found
                SetupLineItemInfo(parse.asiLineNumber, parse.itemSKU, parse.itemQTY, parse.itemUOM, parse.itemPrice);
            }
            ViewBag.LineItemList = lineItemList;
        }
    }


    //This moves the parsed info into the LineItemLiftInfo class properties to be appended as a whole line
    public void SetupLineItemInfo(string asiLineNumber, string itemSKU, string itemQTY, string itemUOM, string itemPrice)
    {
        LineItemListInfo fullLineItemCombined = new LineItemListInfo();
        fullLineItemCombined.asiLineNumber = asiLineNumber;
        fullLineItemCombined.itemSKU = itemSKU;
        fullLineItemCombined.itemQTY = itemQTY;
        fullLineItemCombined.itemUOM = itemUOM;
        fullLineItemCombined.itemPrice = itemPrice;

        lineItemList.Add(fullLineItemCombined);
    }

查看:

ASILIN:

<ul id="lineItems" class="list-unstyled">

    <li>
        ASILineNumber | Item Price | Item Quantity | Item SKU | Item Unit Of Measurement
    </li>
    @foreach (var item in (List<LineItemListInfo>)ViewBag.LineItemList)
        {
        <li>
            <button type="button" id="removeLine"class="glyphicon glyphicon-remove"></button>

            @item.asiLineNumber | @item.itemPrice | @item.itemQTY | @item.itemSKU | @item.itemUOM
        </li>

    }

</ul>

1 个答案:

答案 0 :(得分:2)

您需要以某种方式标记要删除客户端的项目,然后将该状态发回服务器。利用视图模型,您可以添加其他属性,例如bool Delete。然后,在服务器端,您可以使用标记为true的bool过滤项目,并将其从集合中删除。

如果您不想使用视图模型,那么您可以每次点击&#34; x&#34;删除发送一个AJAX请求到某个服务器端端点,然后实际删除该实体。在您的AJAX中,您只需发布类似主键的内容,然后使用它来删除数据库中的项目。