связать список радиобуттон с обратной передачей dropdownlist - PullRequest
0 голосов
/ 01 апреля 2012

Я собираюсь связать список переключателей с выпадающим списком для выпадающего списка. Для этого я установил два действия в элементе управления, но когда представление загружает ошибку: объект refrence null на самом деле перед выпадающим списком обратной связи хочет связать radiobutton, что этот объект времени является нулевым пожалуйста, посоветуйте мне

    namespace Charge.Models
    {
    public class SellChargeModel
    {
    public int Id { get; set; }

    public string Serial { get; set; }

    public DateTime Date { get; set; }

    public string Bank { get; set; }

    public IEnumerable<SelectListItem> Companys { get; set; }

    public IEnumerable<SelectListItem> types { get; set; }

    public ChargeCompanyModel ChargeCompany { get; set; }

    public ChargeTypeModel ChargeType { get; set; }
    }
    }


     namespace Charge.Controllers
     {
     public class ChargeController : Controller
    {
    [HttpGet]
    public ActionResult Main()
    {
        var chargeEntities = new ChargeEntities();
        var sell = new SellChargeModel();
        var query = chargeEntities.ChargeCompanies.ToList();
        var listCompany =
            query.Select(
                company => new SelectListItem {Text = company.Name, Value =                         company.Id.ToString()})
                .ToList();
        sell.Companys = listCompany;
        return View(sell);
    }

    [HttpPost]
    public ActionResult Main(FormCollection form)
    {
        var id = Convert.ToInt32(form["Companys"]);
        var chargeEntities = new ChargeEntities();
        var query = chargeEntities.ChargeTypes.Where(x => x.CompanyId == id).ToList();
        var chargeType = new SellChargeModel();
        var selectList = query.Select(x => new SelectListItem {Text = x.Type, Value = x.Id.ToString()}).ToList();
        chargeType.types = selectList;
        return View(chargeType);
    }

     }
     }

  @model SellChargeModel
  @using Charge.Models
 @{
ViewBag.Title = "Main";
}

  <h2>Main</h2>
   @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "dForm" }))
  {
  <div>
    @Html.DropDownListFor(x => x.Companys, Model.Companys, new {onchange =             "$('#dForm').submit()"})
</div>
<br/>
<br/>
<br/>
<br/>
<br/>
<div>
    @foreach (var c in Model.types)
    {
        @Html.RadioButtonFor(x => x.ChargeType, c.Text, c.Value)
        @Html.Label(c.Text)
    }
  </div>

   }

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

ASP.NET MCV не имеет ViewState.Таким образом, он не будет хранить ваши данные через ваши постбэки для выпадающих списков.Это поведение ASP.NET MVC.Причина, по которой вы получаете нулевую ошибку, заключается в том, что в вашем методе post action вы возвращаете объект, свойства Companys которого имеют значение null.Возможно, вы захотите перезагрузить данные в этом свойстве, прежде чем возвращать их, как вы делали это в методе действия HttpGet

1 голос
/ 01 апреля 2012

В вашем действии [HttpPost] необходимо установить свойство chargeType.Companys так же, как вы действовали в своем действии [HttpGet] (используя chargeEntities.ChargeCompanies и затем сопоставив его с IEnumerable<SelectListItem>). Причина, по которой вам нужно это сделать, заключается в том, что вы повторно отображаете то же представление, в котором вы видите раскрывающийся список, в зависимости от этого свойства. И если свойство имеет значение null, то при попытке отобразить DropDownList вы получаете NRE в представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...