ورود

View Full Version : پیشنمایش اطلاعات وارد شده توسط کاربر قبل از درج در دیتابیس



mr.sirwan
چهارشنبه 22 شهریور 1396, 14:45 عصر
با سلام خدمت دوستای عزیز، من یه فرم ورود اطلاعات دارم که کاربر اطلاعاتشو وارد میکنه و دکمه ثبت رو میزنه و باید مبلغی رو پرداخت کنه، من میخوام قبل از پرداخت و قبل از درج توی دیتابیس، یک پیشنمایشی از اطلاعات وارد شده کاربر رو بهش نشون بدم (تصویر زیر) و درصورت تأیید کاربر، اطلاعاتش توی دیتابیس درج و بعد از اون به صفحه پرداخت هدایت بشه، اما اگه تایید نکرد دیگه لازم نیس اون اطلاعات توی دیتابیس ذخیره بشه
ممنون میشم در این رابطه راهنمایی بفرمایید

146338

Moien Tajik
چهارشنبه 22 شهریور 1396, 16:12 عصر
بعد از وارد کردن اطلاعات و Submit کردن فرم ، شما اطلاعات فرم رو در قالب Model در اکشنتون دریافت میکنید .
این اطلاعات Model رو به یک فرم دیگه که فرم پیشنمایش هست میفرستید و مقادیرشون رو به کاربر نمایش میدید تا کاربر صحت درست بودن اطلاعات رو بررسی کنه .
در صورت صحیح بودن اطلاعات و تایید کاربر ، اطلاعات فرم دوباره post میکنید و در داخل اکشن اون هارو داخل دیتابیس ذخیره میکنید .

mr.sirwan
چهارشنبه 22 شهریور 1396, 16:49 عصر
ممنون از پاسختون، فقط یه چیزی که ازش مطمئن نیستم اینه که آیا لیبل هم مثل input ها مقدار خودش رو به اکشن پست میکنه یا خیر؟ چون همونطور که تو تصویر طراحی کردم میخوام هم عنوان فیلد و هم مقدار فیلدها توسط لیبل نمایش داده بشن، و اینکه اگر اینکار ممکنه، از کدوم اورلود Html.LabelFor استفاده کنم؟

Moien Tajik
چهارشنبه 22 شهریور 1396, 17:16 عصر
شما یه صفحه HTML ثابت دارید که اون لیبل های سیاه رنگ هم توشون ثابت هست .
مقادیر آبی رنگ از فرم قبلی که طبیعتا باید از سمت textbox دریافت بشه بعنوان ورودی ، به فرم پیشنمایش برای تایید انتقال داده میشن .
اگر منظورتون از فرستادن لیبل ، فرستادن اون تکست های سیاه رنگ هست ، اینکار اشتباه هست و اون ها جز قسمت های Static هست و فقط تکست های آبی رنگ داینامیک هستن و باید از مدل دریافت بشن .

mr.sirwan
چهارشنبه 22 شهریور 1396, 17:29 عصر
ببینید من روال کار رو میدونم به چه شکل هست --> کاربر تو فرم ورود اطلاعات، اطلاعاتش رو وارد و روی دکمه ثبت کلیک میکنه و اون اطلاعات به عنوان یک مدل به اکشنم پست میشه، حالا طبق گفته شما من میام همون مدل رو به یه اکشن دیگه که مربوط به پیشنمایش هست ارسال میکنم و اونجا داخل یه فرم دیگه فقط مقادیر رو نمایش میدم، اون متن های ابی رنگ همون اطلاعتیه که از مدل میاد، اونجا یه دکمه پرداخت هست که وقتی زده بشه، دوباره این اطلاعات در قالب یه مدل به اکشنم پست میشه.
چیزی که من تو صفحه پیشنمایش میخوام اینه که اون متن های ابی از جنس لیبل باشن، یعنی نمیخوام تکست باکس و ادیتور فور و... باشن، میخوام فقط جنبه نمایشی داشته باشن و بشه مقادیرشون رو به اکشن پست کرد... حالا سوالم اینجاس که آیا لیبل داخل فرم (همون متن های ابی) میتونه مثل تکست باکس که مقدارش رو پست میکنه، لیبل هم مقدارش رو ارسال کنه؟ یا با لیبل همچین کاری نمیشه انجام داد؟
امیدوارم منظورمو متوجه شده باشین

Moien Tajik
چهارشنبه 22 شهریور 1396, 17:54 عصر
شما اصلا قرار نیست دوباره تو قسمت پیشنمایش ، مدل جدید بسازید و مقادیرش رو در اکشن دریافت کنید که دغدغه گرفتن تکست از یک paragraph در اکشن رو داشته باشید .

با استفاده از Tempdata شما میتونید اطلاعات مدل رو از یک اکشن به اکشن دیگه بفرستید .
کار دیگه هم که میتونید انجام بدید ، مشابه کاریه که وقتی یک کنترلر رو از روی مدل Scaffold میکنید ، برای Delete کردن یک رکورد استفاده میشه ، یعنی مدل رو با return کردن بین اکشن و ویو ها جا به جا میکنید .

mr.sirwan
چهارشنبه 22 شهریور 1396, 20:13 عصر
فک کنم منظور منو دقیق متوجه نشدید یا شاید من منظور شمارو نگرفتم :لبخند:
من مشکلی با پاس دادن اطلاعات مدل به ویو و یا از اکشن به اکشن ندارم، مشکل من اینه که چطوری اطلاعاتی که توی ویوی پیشنمایش هستش رو دوباره از این ویو پس بگیرم که بتونم اون اطلاعات رو توی دیتابیس درج کنم، توی پاسخ اولتون (پست دوم این تاپیک) به این اشاره کردین که توی ویوی پیشنمایش بیام از فرم استفاده کنم و اون اطلاعات رو داخل فرم نمایش بدم و توسط دکمه submit دوباره اون اطلاعات رو پست کنم به اکشنم و اونجا عملیات درج و... رو انجام بدم که خب راهکار هوشمندانه ای هستش.

منم برام سوالی پیش اومد که:
"من که میخوام اطلاعات رو توی ویوی پیشنمایش داخل فرم در قالب لیبل(نه تکست باکس) فقط نمایش بدم، ایا لیبل این قابلیت رو داره که مقدار خودش رو پرام پست کنه به اکشن که اونجا بتونم دوباره در قالب یک مدل ازش استفاده کنم؟"

ممنون بابت پاسخگوییتون

Moien Tajik
چهارشنبه 22 شهریور 1396, 21:55 عصر
منظورتون رو فهمیدم عزیز,


"من که میخوام اطلاعات رو توی ویوی پیشنمایش داخل فرم در قالب لیبل(نه تکست باکس) فقط نمایش بدم، ایا لیبل این قابلیت رو داره که مقدار خودش رو پرام پست کنه به اکشن که اونجا بتونم دوباره در قالب یک مدل ازش استفاده کنم؟"
شما نیازی نیست که اطلاعات بعد از تایید از فرم بگیرید ، اطلاعات رو پاس دادید به اکشن ، اگر کاربر تایید کرد با Tempdata پاسش میدید به اکشن پست .
تو اون اکشن شما هیچ اطلاعاتی برای دریافت لازم ندارید ، فقط یک bool لازم هست برای اینکه بفهمید کاربر تایید کرده یا خیر .
همه ی کار انتقال Model شما با Tempdata انجام میشه .

mr.sirwan
چهارشنبه 22 شهریور 1396, 22:41 عصر
ببخشید جناب تاجیک من با این توضیحات یکم گیج شدم، بیاید سناریو رو بصورت کاملا خلاصه مرور کنیم:

کاربر هدایت میشه به اکشن GetAReserve که نوعش GET هستش و داخل ویوی این اکشن اطلاعات رو وارد میکنه و ثبتو میزنه این اطلاعات در قالب مدل به اکشن GetAReserve که از نوع POST هست پست میشه و بعد از اعتبارسنجی های لازم باید به اکشن PreviewPatientInfo هدایت بشه، از اینجا به بعدش رو اگر لطف کنین یکم واضحتر بیان کنین ممنون میشم.

مگر نه اینکه TempData بعد از اینکه از یه اکشن به اکشن دیگه پاس داده شد و تو اکشن دوم ازش استفاده بشه بعد از پایان ریکوست مربوط به اکشن دوم، TempData اطلاعاتش از بین میره؟ یا من نحوه کار TempData رو اشتباه متوجه شدم :متفکر:

Moien Tajik
پنج شنبه 23 شهریور 1396, 13:11 عصر
[HttpPost]
public ActionResult SubmitForm(ModelData model)
{
// اطلاعات بعنوان پارامتر ورودی از فرم ، از کاربر دریافت میشوند
return ApproveInputs(model);
}


[HttpGet]
public ActionResult ApproveInputs(ModelData model)
{
// دریافت و ذخیره اطلاعات برای استفاده از آن در اکشن پست در صورت تایید اطلاعات
TempData["Model"] = model;
TempData.Keep();

// نمایش پیشنمایش اطلاعات وارد شده به کاربر برای تایید صحت اطلاعات
return View(model);
}


[HttpPost]
public ActionResult ApproveInputs(bool isApproved)
{
// اگر صحت اطلاعات تایید شده بود ، اطلاعات وارد دیتابیس شود
if(isApproved)
{
// دریافت اطلاعات مدل از اکشن قبل
ModelData model = (ModelData)TempData["Model"];

db.YourTableName.Add(model);
db.SaveChanges();
}
// ...
}