Sayfalar

14 Ocak 2013 Pazartesi

CheckBoxListFor - MVC Extension method

public static MvcHtmlString CheckBoxListFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty[]>> expression, MultiSelectList multiSelectList, object htmlAttributes = null)
{
    StringBuilder result = new StringBuilder();
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
    string htmlFieldName = ExpressionHelper.GetExpressionText(expression);

    //Seçili olan ViewData model değerleri alınıyor
    TProperty[] list = expression.Compile().Invoke(helper.ViewData.Model);

    List<string> selectedValues = new List<string>();
    if (list != null)
        selectedValues = new List<TProperty>(list).ConvertAll<string>(delegate(TProperty i) { return i.ToString(); });

    //Checkboxe ekleniyor
    result.Append("<div>");
    foreach (SelectListItem item in multiSelectList)
    {
        result.AppendFormat("<div><input type=\"checkbox\" name=\"{0}\" id=\"{0}_{1}\" " +
                                            "value=\"{1}\" {2} /><label for=\"{0}_{1}\">{3}</label></div>",
                                            htmlFieldName,
                                            item.Value,
                                            selectedValues.Contains(item.Value) ? "checked=\"checked\"" : "",
                                            HttpUtility.HtmlEncode(item.Text));

    }
    result.Append("</div>");

    return MvcHtmlString.Create(result.ToString());
}

BookModel.cs adında bir sınıf oluşturun ve aşağıdaki kodu yapıştırın
public class BookModel
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int[] Ids { get; set; }
    public virtual MultiSelectList BookList { get; set; }
}

BookController.cs adında bir controller oluşturun ve aşağıdaki kodu yapıştırın.
public class LevelController : Controller
{
    public ActionResult BookList()
    {
        List<BookModel> bookList = new List<BookModel>();
        bookList.Add(new BookModel() { Id = 1, Name = "Duyguların Rengi" });
        bookList.Add(new BookModel() { Id = 2, Name = "Şah ve Mat" });
        bookList.Add(new BookModel() { Id = 3, Name = "Uçurtma Avcısı" });
        bookList.Add(new BookModel() { Id = 4, Name = "Suskunlar" });
          

        var model = new BookModel();
        model.BookList = new MultiSelectList(bookList , "Id", "DetailName", model.SelectedLevelDetailChildIds);

        return View(model);
    }
}

BookList.cshtml adında bir view oluşturun ve aşağıdaki kodu yapıştırın.
@model BookModel
<table>
        <tr>
            <td>
                @Html.CheckBoxListFor(model => model.Ids, Model.BookList)
            </td>
        </tr>
</table>

Hiç yorum yok:

Yorum Gönder

Yorumunuzu bırakın.