مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

محمد ملکی

عضویت از 1394/03/02

Null شدن مقادیر Model در پاس دادن به اکشن

  • شنبه 15 خرداد 1395
  • 10:11
تشکر میکنم

سلام ببینید من یه کلاس دارم به صورت زیر است

 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 برمیگردونه

ایرادم کجاست ؟ دیگه هر کاری میشد کردم جواب نداد

ممنونم

پاسخ های این پرسش

تعداد پاسخ ها : 5 پاسخ
کاربر سایت

افشین ایمانی زاده

عضویت از 1393/12/24

  • شنبه 15 خرداد 1395
  • 11:41

با سلام

دوست عزیز برای این کار من از 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" />

 

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 15 خرداد 1395
  • 15:43

نام ورودی متد با نام Rout پیشرفض یکی شده

 id رو به نام دیگری تغییر دهید

کاربر سایت

dera

عضویت از 1394/02/07

  • پنجشنبه 8 مهر 1395
  • 21:16
سلام بجای hiddenfor از چه راه دیگه ای میشه استفاده کرد من تو ویوو نزدیک 30 تا hiddenfor استفاده کردم راه بهینه تری وجود داره؟؟؟
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • جمعه 9 مهر 1395
  • 07:40

میتونید از TempData استفاده کنید

کاربر سایت

dera

عضویت از 1394/02/07

  • جمعه 9 مهر 1395
  • 10:05

از TempData هم استفاده کردم ولی در نهایت نشد و برگشتم به همون hiddenFor ولی بازم یجای کارم گیر داره

ی صفحه ثبت نامی دارم ک در مرحله آخر وقتی کلید ثبت زده میشه میره به اکشن تایید اطلاعات. ک مدل رو گذاشتم تو TempData و TempData رو به عنوان مدل به اکشن ConfirmView فرستادم . چون خود مدل null ارسال میشد

تا اینجا همه چیز درسته ولی هنو چیزی ثبت نشده و اینکه از ویو مدل ها دارم استفاده میکنم.

سوالم اینجاس ک وقتی تو صفحه تایید اطلاعات اگ کاربر متوجه اشتباهی شد و خواست برگرده عقب . من ی اکشن لینک گذاشتم و برمیگرده به عقب ولی ایندفه ک برمیگرده دیگ اون تکست باکسها خالی هستن درواقع مدل null برمیگرده خود TempDataرو هم گذاشتم اونم باز null شده انگار tempdata  فقط یبار پر میشه و برای بار بعدی خالی میشه حتی TempData.Keep() رو هم گذاستم ولی بازم نشد.

ممنون میشم راهنماییم کنید

امیدوارم توضیحاتموو خوب داده باشم 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)