2013-11-03 50 views
1

我试图将dropdownlist值传递给我的控制器,所以我可以将值添加到一个paycodes列表,但我不断收到“值不能为空”。错误。我的支付代码列表中有很多项目。不知道什么是空或错在这里...Razor - 通过Ajax.BeginForm将DropDownList选定值传递给控制器​​

内部异常

Value cannot be null. 
Parameter name: source 

VIEW

 <!-- products input--> 
     <div class="control-group col-lg-6"> 
      <label class="control-label">Product</label> 
      <div class="controls"> 
       @using (Ajax.BeginForm("AddPayCode", "Referral", 
    new AjaxOptions() 
    { 
     HttpMethod = "POST", 
     InsertionMode = InsertionMode.Replace, 
     UpdateTargetId = "PayCodes", 
     Url = Url.Action("AddPayCode", "Referral") 
    })) 
       { 
        @Html.ValidationSummary() 

        @Html.DropDownListFor(model => model.SelectedPayCode, new SelectList(Model.PayCodes.ToList(), "Id", "Description"), "- Select -") 
        <input type="submit" value="Add" /> 
       } 
      </div> 
     </div> 

控制器

[HttpPost] 
public void AddPayCode(ReferralModel model) 
{ 
    var test = model.SelectedPayCode; 
    //TODO: Add to model.Referral.PayCodes list and return list of selected items 
} 

模型

public class ReferralModel 
{ 
    public Customer Customer { get; set; } 
    public Employee Employee { get; set; } 
    public List<PayCode> PayCodes { get; set; } 
    public int SelectedPayCode { get; set; } 

    public Referral Referral { get; set; } 
} 

域对象

public class Referral 
{ 
    [Key] 
    public int Id { get; set; } 
    public int CustomerId { get; set; } 
    public int EmployeeId { get; set; } 
    public decimal Total { get; set; } 

    public virtual List<PayCode> PayCodes { get; set; } 
    public virtual Customer Customer { get; set; } 
    public virtual Employee Employee { get; set; } 
} 

目的:

  • 用户从下拉菜单中选择一个paycode并点击 “添加” Paycode是

  • 添加到介PayCodes列表

  • 控制器返回选择到视图的付费代码列表(不是 尚未实施)

+0

异常告诉你什么是空...但我看不到参数源在问题的任何地方!你应该发布它! – Fals

+0

我的项目中没有一个名为source的参数。这对我来说是如此令人困惑。 – devfunkd

+1

您应该发布有关异常的更多信息!它何时发生?另一件事,你已经在表单函数中提供post的路由,所以你不需要Url = Url.Action(“AddPayCode”,“Referral”) – Fals

回答

1

问题是控制器缺少下拉列表的属性。

[HttpPost] 
public void AddPayCode(ReferralModel model, ** string SelectedPayCode ** <-- missing) 
{ 
    var test = SelectedPayCode; 
    //TODO: Add to model.Referral.PayCodes list and return list of selected items 
} 
相关问题