通过ajax动态添加项目到模型中的列表

时间:2013-11-04 04:06:09

标签: ajax asp.net-mvc-4

我有以下代码,每次用户从下拉列表中选择并点击“添加”时,我都会尝试将所选值添加到model.SelectedPayCodes列表

CONTROLLER

[HttpPost]
public PartialViewResult AddPayCode(ReferralModel model, string SelectedPayCode)
{
    var payCode = _employeeService.GetPayCodeById(Convert.ToInt32(SelectedPayCode));

    model.Add(payCode); 
    return PartialView("_PayCodesPartial",model);
}

MODEL

public class ReferralModel
    {
        public Customer Customer { get; set; }
        public Employee Employee { get; set; }
        public List<PayCode> PayCodes { get; set; } // List of paycodes
        public List<PayCode> PayCodesList { get; set; } // List of 'selected' paycodes
        public SelectListItem SelectedPayCode { get; set; } // current selected paycode

        public Referral Referral { get; set; }

        public ReferralModel()
        {
            PayCodesList = new List<PayCode>();
        }

        // Step 3 - Add Paycode is done here.
        public void Add(PayCode payCode)
        {
            PayCodesList.Add(payCode);
        }
    }

查看 - Create.cshtml

    @using (Ajax.BeginForm("AddPayCode", "Referral",
    new AjaxOptions()
    {
        HttpMethod = "POST",
        InsertionMode = InsertionMode.InsertAfter,
        UpdateTargetId = "PayCodes",
    }))
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary()
        <!-- payCodes input-->
        <div class="control-group col-lg-6">
            <label class="control-label">Product</label>
            <div class="controls">
                <!-- Step 1 + Choose PayCode Here -->
                @Html.DropDownListFor(model => model.SelectedPayCode, new SelectList(Model.PayCodes.ToList(), "Id", "Description"), "- Select -")
                <input type="submit" value="Add" />

            </div>
        </div>

        <!-- pay codes list -->
        <div id="PayCodes">
        </div>
    }

VIEW - _PayCodesPartial.cshtml

@model Zenwire.Models.ReferralModel

@if (Model.PayCodesList != null)
{
    foreach (var item in Model.PayCodesList)
    {
        string.Format("{0} - {1}", item.Code, item.Description);
    }
}

问题似乎是每当添加新项目时,列表再次为空并且不保留它之前的选择。

1 个答案:

答案 0 :(得分:2)

试试这个。我使用了Session State

 public PartialViewResult AddPayCode(ReferralModel model, string SelectedPayCode)
    {
        var payCode = _employeeService.GetPayCodeById(Convert.ToInt32(SelectedPayCode));

        model.PayCodesList = GetPayCodes();
        model.Add(payCode);
        Session["paycodes"] = model.PayCodesList; 
        return PartialView("_PayCodesPartial",model);
    }

    private List<PayCode> GetPayCodes()
    {
        List<PayCode> payCodes = (List<PayCode>)Session["paycodes"];
        if (payCodes == null )
        {
           payCodes = new List<PayCode>();
           Session["paycodes"] = paycode;
        }
        return payCodes;
     }