Заполнение CheckBox в ASP.NET MVC из SQL Server - PullRequest
2 голосов
/ 19 декабря 2011

Я работаю над кодом ASP.NET MVC3 для привязки CheckBoxes, используя данные из столбца моей базы данных SQL, представленной в каталоге App_Data.

My table SysUser3 содержит два столбца со следующими значениями:

 ProductName    ||        ProductId

  Pencil                    1
  Eraser                    2  
  Pen                       3  

Модель:

public class StoreModel
{
    public List<ProductModel> Products { get; set; }
}

public class ProductModel
{
    public string ProductName { get; set; }
    public bool Selected { get; set; }
}

Контроллер:

    [HttpGet]
    public ActionResult CheckView()
    {
        var model = new StoreModel
        {
            Products = m.GetCheckBoxes()
        };

        return View(model);
    }

// Метод GetCheckBoxes ()

    public IList<ProductModel> GetCheckBoxes()
    {
        IList<ProductModel> items = new List<ProductModel>();
        using (SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DeveloperReport.mdf;User Instance=true"))
        {
            con.Open();

            string cmdString = "SELECT ProductName FROM SysUser3";
            using (SqlCommand cmd = new SqlCommand(cmdString, con))
            {
                using (SqlDataReader dataRead = cmd.ExecuteReader())
                {
                    while (dataRead.Read())
                    {
                        items.Add(new ProductModel
                        {

                            Text = dataRead["ProductName"].ToString()
                        });
                    }
                }
            }
        }
        return items;
    }

Вид:

     @using (Html.BeginForm())
     {

      <div>
        @Html.HiddenFor(x => x.ProductName)
        @Html.CheckBoxFor(x => x.Selected)
        @Html.LabelFor(x => x.Selected, Model.ProductName) 
      </div>

      }

Однако мой код не работает нормально, и я не могу видеть, как происходит привязка. Я просто получаю пустой флажок при запуске кода.

Может кто-нибудь сказать мне, что я делаю не так

Заранее спасибо

1 Ответ

3 голосов
/ 19 декабря 2011

В вашем DAL вы, похоже, определяете переменную item как List<ProductModel>(), а внутри предложения while вы, кажется, добавляете элементы типа RoleModel в этот список, назначая только свойство Text, а не свойство Selected, к которому привязан флажок. Кажется, вы выбираете только ProductName (SELECT ProductName FROM SysUser3).

Кажется, что в вашей таблице нет выбранного логического столбца, поэтому вы не можете правильно заполнить это свойство, и, следовательно, сгенерированный флажок в представлении никогда не будет проверен.

Полагаю, вам придется переосмыслить дизайн базы данных. Но это уже другая тема.

Что касается ASP.NET MVC, если вы предоставляете правильную модель представления для представления:

public ActionResult CheckView()
{
    var model = new StoreModel
    {
        Products = new[]
        {
             new ProductModel { ProductName = "product 1", Selected = true },
             new ProductModel { ProductName = "product 2", Selected = false },
             new ProductModel { ProductName = "product 3", Selected = true },
        }.ToList()
    };

    return View(model);
}

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

@model StoreModel
@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.Products)
    <button type="submit">OK</button>
}

и в соответствующем шаблоне редактора (~/Views/Shared/EditorTemplates/ProductModel.cshtml), который будет отображаться для каждого элемента коллекции Products вашей модели представления:

@model ProductModel
<div>
    @Html.HiddenFor(x => x.ProductName)
    @Html.CheckBoxFor(x => x.Selected)
    @Html.LabelFor(x => x.Selected, Model.ProductName) 
</div>

И тогда, очевидно, у вас будет соответствующее действие POST, которое примет вашу модель представления в качестве аргумента и вызовет базовый DAL для некоторой обработки:

[HttpPost]
public ActionResult CheckView(StoreModel model)
{
    // the model.Products collection will be properly bound here
    // with the values that the user selected in the form
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...