PDA

View Full Version : model binding درست کار نمیکنه!



RIG000
شنبه 11 آبان 1392, 17:06 عصر
راستش قاطی کردم.
من میخام که با زدن دکمه edit یه رکورد رو اپدیت کنم. اما نمیخام دیگه از httpget استفاده شده. من با

@model IEnumerable<Toranj_Co.Models.tblFactor>
این کار رو میکنم و یه لیست میگیرم از جدولم. حالا بین اون سه دکمه edit delete details میخام وقتی رو دکمه edit کلیک کردم و یه رکورد از این لیست رو ثبت کنه با کدid ...
من تو این ویو لیست خدوم شمارنده تعداد گذاشتم و از برای نمایشش از TEXTBOX استفاده کردم. حالا فقط میخام اطلاعات یک رکورد رو ثبت کنم. همین... :( خیلی قاطی کردم.

RIG000
شنبه 11 آبان 1392, 17:08 عصر
@model IEnumerable<Toranj_Co.Models.tblFactor>

@{
ViewBag.Title = "FactorList";
Layout = "~/Views/Shared/_LayoutMasterAllPage.cshtml";
}

<div style="margin:10px">
<div style="font-weight:700;direction:rtl;">
لیست خرید <mark style="color:green" >@User.Identity.Name</mark>
</div>
<div style="margin-top:10px">
<p>
@Html.ActionLink("باز گشت به صفحه خرید", "StartPage")
</p>
</div>

<table style="text-align:center;">
@using (Html.BeginForm("StartPage","Home",FormMethod.Post))
{
<thead style="background-color:#300000" >
<tr>
<th>
@Html.Label("مدل")
</th>
<th>
@Html.Label("کد کالا")
</th>
<th>
@Html.Label("وضعیت")
</th>
<th>
@Html.Label("تعداد کل")
</th>
<th>
@Html.Label("قیمت کل")
</th>
<th>
@Html.Label("تاریخ")
</th>
</tr>
</thead>

<tbody style="background-color:black;color:DarkGreen;font-weight:700" >
@foreach (var item in Model) {

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

@Html.HiddenFor(modelItem => item.FacId)
@Html.HiddenFor(modelItem => item.UserId)
@Html.HiddenFor(modelItem => item.KindId)
</td>
<td>
@Html.DisplayFor(modelItem => item.KalaId)
</td>
<td>
@*@Html.DisplayFor(modelItem => item.Finish)*@

@if(item.Finish==1)
{
@Html.Label("تایید خریدار نشده")
}
else if (item.Finish == 2)
{
@Html.Label("منتظر تایید مدیر")
}
else
{
@Html.Label("تایید شد")
}


</td>
<td>
@Html.TextBoxFor(modelItem => item.TotalCount, new {size="1", @style="text-align:Center;color:Blue" })
</td>
<td>
@Html.DisplayFor(modelItem => item.TotalPric, new { @style="text-align:Center;color:Blue" })
</td>
<td>
@Html.DisplayFor(modelItem => item.date)
</td>
<td>
@*,State=2,TotalCount=item.TotalCount,TotalPric=it em.TotalCount*@
@Html.ActionLink("تائید ", "BasketEdit", new {id=item.FacId}) |
@*@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |*@
@Html.ActionLink("حذف ", "BasketDelete", new { id=item.FacId })
</td>
</tr>

}
</tbody>
}
</table>

</div>

RIG000
شنبه 11 آبان 1392, 17:09 عصر
لطفا" راهنمایی کنید خیلی قاطی کردم. :(اوووووف

star_rh
شنبه 11 آبان 1392, 17:32 عصر
منظورت اینکه که روی هر فیلد که کلیک کنی همونجا ویرایش و ثبتش کنی .منظورت رو خوب نفهمیدم...)

RIG000
شنبه 11 آبان 1392, 17:36 عصر
112477
دکمه تایید رو میبینید مثلا تعداد کل رو کنم 4 تا برای اولین رکورد بره واسه من این چها رو به جای 1 که پیش فرض هست تایید کنه

RIG000
شنبه 11 آبان 1392, 17:39 عصر
منظورت اینکه که روی هر فیلد که کلیک کنی همونجا ویرایش و ثبتش کنی .منظورت رو خوب نفهمیدم...)
اره دقیقا حالا ویرایش و حذف کنه ..

RIG000
شنبه 11 آبان 1392, 17:40 عصر
اگه روی این اکشن کلیک کنیم این کار رو انجام بده

@Html.ActionLink("تائید ", "BasketEdit", new {id=item.FacId})
اگه ما یه EDIT درست کنیم واسه ویوش ...
مدل ما دیگه لیست نیست
اینجوریه ...

@model Toranj_Co.Models.tblFactor

RIG000
شنبه 11 آبان 1392, 17:47 عصر
کل منظور م اینه که
@Html.ActionLink("تائید ", "BasketEdit", new {id=item.FacId})
کلیک کردم
این برام اجرا شه . یعنی این رکورد رو برام ببره تو این اکشن کلا"



[HttpPost]
public ActionResult BasketEdit(tblFactor fac)
{
ToranjNameSpace.BasketEdit(fac ,DateTime.Now);
return RedirectToAction("FactorList");
}

star_rh
شنبه 11 آبان 1392, 18:03 عصر
یه راه اینه که برای دکمه Edit
ID هر کدوم رو داشته باشه و روی هر کدوم کلیک کنه ای دی اون ارسال بشه به Edit و تو View ادیت اون رو ویرایش کنه.

برای حالت بعد که تو همون ویرایش در محله کنه بایستی یکم جاوااسکریپت با jquery بلد باشی. روی هر ایتمی که کلیک شه یک فرم ایجاد می شه که حاوی اطلاعات همون ایتمه. بعد از ثبت همون فرم ارسال شه.
البته می تونی اینرو با ajax یا json استفاده کنی بهتره.

می تونی از این استفاده کنی. http://www.appelsiini.net/projects/jeditable

RIG000
شنبه 11 آبان 1392, 18:09 عصر
مرسی. اما من دیدم که تو وب سایت هایی مستقیم انجام دادن...
اما فکر نکنماا . باید اینجوری حداق لیستی رو ارسال کرد و ...

RIG000
شنبه 11 آبان 1392, 18:18 عصر
الان اینجوری ارسال میکنه اما NULL میفرسته ...

}
<tr>
<th><input value="SAVE" type="submit" /></th>
</tr>
</tbody>

}
</table>

hakim22
یک شنبه 12 آبان 1392, 08:42 صبح
شما قبل و بعد از Table باید یک تگ Form داشته باشید. در ASP.MVC معمولا این کار با Html.BeginForm@ انجام میشه . در این حالت وقتی اطلاعات رو Submit میکنید به سرور منتقل میشه. اما برای اینکه به درستی کار کنه باید خاصیت Name مربوط به هر TextBox رو به صورت آرایه ای بسازید. یعنی درون حلقه ی Foreach یک شمارنده داشته باشید. در خاصیت Name مربوط به TextBox ها رو همنام فیلد اما همراه باشماره قرار بدید تا ModelBinding نتیجه ی ارسال شده رو به صورت IEnumerable بخونه

مثلا :


@{
fieldName="MyField"+Counter.tostring;

counter++;
}
<input type="Textbox" name="@fieldName">


البته باید مدل رو هم به صورت List بخونید . کلا پیاده سازی این مسئله به سادگی ممکن نیست و نیاز به تجربه داره.

برای پیاده سازی یک سیستم افزودن و ویرایش و حذف دینامیک روشی که من پیشنهاد میکنم استفاده از Knockout است. و اینکه نتیجه باید در قالب یک Ajax به سرور منتقل بشه.

یک روش دیگه میتونه این باشه که شما برای هر ردیف درون جدول یک تگ Form قرار بدید و دکمه ی تایید در هر ردیف روی submit باشه. در این صورت Model Binding خیلی ساده میشه و اگر از Ajax.BeginForm@ استفاده کنید کار شما بسیار ساده میشه.

RIG000
یک شنبه 12 آبان 1392, 09:15 صبح
یه چیزی بیشتر از راهنمایی میخام. میشه یه نمونه کد بدبد؟ یا کد خودم درستش کنید :(

star_rh
یک شنبه 12 آبان 1392, 10:06 صبح
از Jtable استفاده کن.
http://www.4shared.com/zip/vVEENOyn/jTableDemos.html

RIG000
یک شنبه 12 آبان 1392, 10:09 صبح
از Jtable استفاده کن.
اینم بلد نیستم. :(همون لینکی هست که گذاشتی؟

RIG000
یک شنبه 12 آبان 1392, 10:11 صبح
یه راه اینه که برای دکمه Edit
ID هر کدوم رو داشته باشه و روی هر کدوم کلیک کنه ای دی اون ارسال بشه به Edit و تو View ادیت اون رو ویرایش کنه.

برای حالت بعد که تو همون ویرایش در محله کنه بایستی یکم جاوااسکریپت با jquery بلد باشی. روی هر ایتمی که کلیک شه یک فرم ایجاد می شه که حاوی اطلاعات همون ایتمه. بعد از ثبت همون فرم ارسال شه.
البته می تونی اینرو با ajax یا json استفاده کنی بهتره.

می تونی از این استفاده کنی. http://www.appelsiini.net/projects/jeditable
این سختمه تا ببینم ه طوری کار میکنه و .. کلی زمان میگیره واسم :(

RIG000
یک شنبه 12 آبان 1392, 10:27 صبح
من تو این فرم دو تا کار باید انجام بدم یکی اینکه همینی که میخام. یکی هم اینکه اونایی که تایید شدن رو بفرستم به فرم دیگه واسه خرید انلاین.
من مشکلم فعلا اولی هست :(

RIG000
یک شنبه 12 آبان 1392, 10:28 صبح
فقط نیاز دارم که یه ویو که از یه لیست پر شده رو رکورد هایی رو که میخام انتخاب کنم و فیلد تعداد کل اونها رو تغییر بدم و بفرستم واسه یه اکشن که این تغییرات رو اعمال کنه.. :(