ورود

View Full Version : استفاده از چک باکس در mvc



RIG000
دوشنبه 01 مهر 1392, 12:26 عصر
میخام چند چک باکس رو به به اکش delete ارسال کنم . میدونم که تو اکش delete میشه این با لیست این اطلاعات رو گرفت . این وسط میدونم که یه value میخام از ویو ارسال کنم و تیک چک باکس هم نشانه این باشه که true ها ارسال بشن ....
نمی دونم چه جوری کد بزنم تا اطلاعات رو به اکشن delete برسونم.

RIG000
دوشنبه 01 مهر 1392, 12:42 عصر
لطفا" فوری جواب بدید / یه نمونه کامل بذارید لطفا

RIG000
دوشنبه 01 مهر 1392, 13:14 عصر
@model IEnumerable<MvcApplication2.Models.JoinUserAuthors>

@{
ViewBag.Title = "Index2";
int next = 0;
}
<style>
.table,td {
border:2px solid red;
}
</style>
<h2>Index2</h2>


<p>
@Html.ActionLink("Create New", "Create")
</p>



<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Userid )
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.AuthorId)
</th>
<th>
@Html.DisplayNameFor(model => model.UserIdAuthors)
</th>
<th>
@Html.DisplayNameFor(model => model.bookname)
</th>
<th></th>
</tr>

@foreach (var item in Model)
{

<tr>
<td>
@Html.DisplayFor(modelItem => item.Userid)

</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.AuthorId)
</td>
<td>
@Html.DisplayFor(modelItem => item.UserIdAuthors)
</td>
<td>
@Html.DisplayFor(modelItem => item.bookname)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { userId = item.Userid }) |
@Html.ActionLink("Details", "Details", new { /* id=item.UserIdAuthors*/ }) |
@Html.ActionLink("Delete", "Delete", new { userId = item.Userid })
@Html.Hidden("chk", item.Userid)
@Html.CheckBox("chk", false)

</td>
</tr>

}

</table>

RIG000
دوشنبه 01 مهر 1392, 13:26 عصر
اصلا میخام با انتخاب تعداد رکورد البته با چک باکس رکورد های انتخاب شده رو به اکشن delete بفرستم تا حذف شه .
کسی نبود کمک کنه؟

Amir Oveisi
سه شنبه 02 مهر 1392, 09:37 صبح
برای این کار یک کلاس بساز مثلا اسمش رو بزار BoolSetting :
public class BoolSetting
{
public string DisplayName { get; set; }
public bool Value { get; set; }
public int Id { get; set; }
}

بعد بیا و یه EditorTemplate برای این مدل بساز:
@model Models.BoolSetting
<div>
@Html.CheckBoxFor(x => x.Value)
@Html.LabelFor(x => x.Value, Model.DisplayName)
@Html.HiddenFor(x => x.Id)
@Html.HiddenFor(x => x.DisplayName)
</div>


بعد بیا و یک ViewModel بساز که توش لیستی از BoolSetting ها + فیلدهای دیگه ای که توی View نیاز داری بهشون رو ایجاد کن. مثلا:
public class OptionViewModel
{
public int VersionId { get; set; }
public Option Option { get; set; }
public ExtraOption ExtraOption { get; set; }
public List<BoolSetting> Prerequesties { get; set; }
[DisplayName("پیش فرض")]
public bool IsDefault { get; set; }
public OptionViewModel()
{
Option = new Option();
ExtraOption = new ExtraOption();
}
}

حالا View ای که برای Delete داری باید model ای که بهش میفرستی از نوع این ViewModel ای باشه که ساختی (در مثال من اسمش OptionViewModel هست). تو این View برای رندر کردن چک باکس ها کافیه که از Html.EditorFor استفاده کنی و فیلدی که از نوع لیستی از BoolSetting ها هست رو به عنوان پارامتر بهش بدی تا بیاد از روی EditorTemplate ای که ساختی قبلا، editor مناسب رو رندر کنه تو View. در نهایت وقتی Form ات submit شد، یک شی از ViewModel به Action مورد نظر (مثلا Delete) به عنوان پارامتر ارسال میشه که میتونی ببینی چه آیتم هایی تیک خورده یا نه.

پ.ن
ممکنه این مثالی که زدم دقیقا مثل کاری که میخوای انجام بدی نباشه ولی در کل روش مناسب برای انجام دادن این مدل کارها، این هست به نظر من.