PDA

View Full Version : چند دگمه submit در یک View



navidiran
یک شنبه 03 آبان 1394, 13:26 عصر
سلام.
اگر بیش از یک دگمه Submit در یک صفحه داشته باشم (مثلا یک ثبت ، یک ویرایش و یک حذف)، امکان تشخیص تفاوت دربین اکشنها وجود ندارد.
یعنی اولین اکشن از نوع httpPost بعنوان اکشن پیش فرض انتخاب می شود. چه راهکاری برای اینکار وجود دارد؟

با تشکر

alireza_s_84
یک شنبه 03 آبان 1394, 17:01 عصر
سلام.
اگر بیش از یک دگمه Submit در یک صفحه داشته باشم (مثلا یک ثبت ، یک ویرایش و یک حذف)، امکان تشخیص تفاوت دربین اکشنها وجود ندارد.
یعنی اولین اکشن از نوع httpPost بعنوان اکشن پیش فرض انتخاب می شود. چه راهکاری برای اینکار وجود دارد؟

با تشکر

توی اکشن مربوطه می تونید چک کنید کدوم دکمه کلیک شده برای مثال:

if (String.IsNullOrEmpty(Request["Insert"]) == false)
{
}
else if (String.IsNullOrEmpty(Request["Delete"]) == false)
{
}
else if (String.IsNullOrEmpty(Request["Edit"]) == false)
{
}


برای هر دکمه نام مناسبی بذارید مثل دکمه افزودن name=Insert

navidiran
دوشنبه 04 آبان 1394, 07:44 صبح
خیلی ممنونم. کاملا صحیح بود اما من خودم به شکل زیر ساختم:



[HttpPost]
public ActionResult MultiAction(Project_Model.DT.Behavior modelObj)
if (Request.Form["Command"] == "Create")
{
}


if (Request.Form["Command"] == "Edit")
{
db.Delete_Behavior_Post(modelObj);
}


if (Request.Form["Command"] == "Delete")
{
db.Delete_Behavior_Post(modelObj);
}



{

navidiran
دوشنبه 04 آبان 1394, 09:13 صبح
یک مشکلی پیش اومد.

بعد از انجام عملیات و Refresh شدن صفحه ، این اکشن دوباره اجرا میشه و توی حلقه بینهایت میوفته.

لطفاً راهنمایی کنید.

alireza_s_84
دوشنبه 04 آبان 1394, 15:43 عصر
یک مشکلی پیش اومد.

بعد از انجام عملیات و Refresh شدن صفحه ، این اکشن دوباره اجرا میشه و توی حلقه بینهایت میوفته.

لطفاً راهنمایی کنید.

یک اصل رو همیشه به خاطر بسپارین Get>Post>Redirect
خب این یعنی چی؟
یعنی شما اطلاعات رو از طریق متد Get به کاربر نشون میدین و از طریق متد Post حذف یا ویرایش می کنید و بعد از حذف یا ویرایش به صفحه دیگه ای هدایت می کنید.
با توجه به اکشن بالا باید یک اکشن دیگه داشته باشین که با [HttpGet] امضا شده باشه و بعد از انجام عملیات مناسب کاربر رو به این متد ریدایرکت کنید.


[HttpGet] public ActionResult MultiAction(Project_Model.DT.Behavior modelObj)
{
return View();
}


[HttpPost]
public ActionResult MultiAction(Project_Model.DT.Behavior modelObj)
{
if (Request.Form["Command"] == "Create")
{
}




if (Request.Form["Command"] == "Edit")
{
db.Delete_Behavior_Post(modelObj);
}




if (Request.Form["Command"] == "Delete")
{
db.Delete_Behavior_Post(modelObj);
}


return RedirectToAction("MultiAction");


}

19216810047
چهارشنبه 06 آبان 1394, 00:13 صبح
سلام.
اگر بیش از یک دگمه Submit در یک صفحه داشته باشم (مثلا یک ثبت ، یک ویرایش و یک حذف)، امکان تشخیص تفاوت دربین اکشنها وجود ندارد.
یعنی اولین اکشن از نوع httpPost بعنوان اکشن پیش فرض انتخاب می شود. چه راهکاری برای اینکار وجود دارد؟

با تشکر

سلام.
البته در هر فرم هم می تونید اکشن متد مخصوص خودش رو معرفی کنید.

navidiran
چهارشنبه 06 آبان 1394, 08:04 صبح
قبل از اجرای


return RedirectToAction("MultiAction");


فرم trace میشه و تغییرات اکشن رو نمیتونه اجرا کنه.

دوستان مسئله کلی رو چطوری میشه حل کرد؟
ببینید موضوع فقط این اکشن بالا نیست. در کل اگر در یک فرم چند دگمه Submit داشته باشیم چه راهکاری برای حل مشکلات Post وجود دارد؟

minaforotan
چهارشنبه 06 آبان 1394, 12:15 عصر
دوستان مسئله کلی رو چطوری میشه حل کرد؟
ببینید موضوع فقط این اکشن بالا نیست. در کل اگر در یک فرم چند دگمه Submit داشته باشیم چه راهکاری برای حل مشکلات Post وجود دارد؟

چندین روش مختلف وجود داره 2 تا از ساده تریناش اینه
شما چند تا پارشال جدا برای هر عملی میسازی و هر پارشال دکمه submit خودش رو داره حالا اون پارشال ها رو تو فرم مورد نظرت فراخوانی میکنی
یک راه دیگه هم اینه که شما برای هر عملی که نیاز به submit شدن داره یک (()using (Ajax.BeginForm@ استفاده کنی