سلام ببینید من یه کلاس دارم به صورت زیر است
public class BlockOptions { public bool Option { get; set; } public int id { get; set; } }
میخوام یه اکشنی داشته باشم که به صورت پیش فرض یه مقادیری رو به view پاس بده به صورت زیر است
[HttpGet] public ActionResult SetupBlock(int id) { BlockOptions b = new BlockOptions(); b.id = id; return View(b); }
وقتی view رو نمایش میده همه چی اکی و خوبه به صورت زیر
میخوام وقتی طرف یه گزینه رو زد اون گزینه انتخابی و id ام که در قالب کلاس BlockOption هست به اکشنم پاس داده بشه
این کد view
@model CMScharge.Classes.BlockOptions @{ ViewBag.Title = "SetupBlock"; Layout = "~/Views/Shared/_MainLayout.cshtml"; } <h2>برای ایجاد حساب در شارژ پرند یکی از گزینه های زیر را انتخاب نمایید:</h2> @if (Model != null) { using (Html.BeginForm("SetupBlock", "Home")) { @Html.HiddenFor(c => c.id); @Html.HiddenFor(c => c.Option); <div class="form-horizontal"> <div class="form-group"> <div class="rtlText"> @*@Html.RadioButtonFor(model => model.Option, "true", new { id = "rdoDefault" })*@ @Html.RadioButtonFor(model => model.Option, true) @Html.Label("Default", "مدل معمولی-همه واحدها در یک ساختمان قرار دارند") </div> <div class="rtlText"> @*@Html.RadioButtonFor(model => model.Option, "false", new { id = "rdoIntegrated" })*@ @Html.RadioButtonFor(model => model.Option, false) @Html.Label("Integrated", "مدل مجتمع-واحدهای ساختمان در چند بلوک یا ورودی پراکنده اند") </div> </div> <div class="form-group"> <div class="rtlText"> <input type="submit" value="مرحله بعد" class="btn btn-default" /> </div> </div> </div> } }
و این هم قسمت post اکشنم
[HttpPost] public ActionResult SetupBlock(BlockOptions id) { if (id != null && id.Option != null) { if (id.Option)//معمولی { return RedirectToAction("CompleteRegister", new System.Web.Routing.RouteValueDictionary(new { controller = "Home", action = "CompleteRegister", id = id.id })); } else//مجتمع { return null; } } }
هر کاری میکنم وقتی میام توو post متاسفانه null برمیگردونه
ایرادم کجاست ؟ دیگه هر کاری میشد کردم جواب نداد
ممنونم
با سلام
دوست عزیز برای این کار من از ViewBag استفاده می کنم مانند زیر
[HttpGet] public ActionResult SetupBlock(int id) { ViewBag.ID = id; return View(); }
و بعد در View مانند زیر به جای HiddenFor ها از Input خود Html استفاده می کنم
<input type="hidden" name="id" id="id" value="@ViewBag.ID" />
نام ورودی متد با نام Rout پیشرفض یکی شده
id رو به نام دیگری تغییر دهید
میتونید از TempData استفاده کنید
از TempData هم استفاده کردم ولی در نهایت نشد و برگشتم به همون hiddenFor ولی بازم یجای کارم گیر داره
ی صفحه ثبت نامی دارم ک در مرحله آخر وقتی کلید ثبت زده میشه میره به اکشن تایید اطلاعات. ک مدل رو گذاشتم تو TempData و TempData رو به عنوان مدل به اکشن ConfirmView فرستادم . چون خود مدل null ارسال میشد
تا اینجا همه چیز درسته ولی هنو چیزی ثبت نشده و اینکه از ویو مدل ها دارم استفاده میکنم.
سوالم اینجاس ک وقتی تو صفحه تایید اطلاعات اگ کاربر متوجه اشتباهی شد و خواست برگرده عقب . من ی اکشن لینک گذاشتم و برمیگرده به عقب ولی ایندفه ک برمیگرده دیگ اون تکست باکسها خالی هستن درواقع مدل null برمیگرده خود TempDataرو هم گذاشتم اونم باز null شده انگار tempdata فقط یبار پر میشه و برای بار بعدی خالی میشه حتی TempData.Keep() رو هم گذاستم ولی بازم نشد.
ممنون میشم راهنماییم کنید
امیدوارم توضیحاتموو خوب داده باشم
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)