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

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

کاربر سایت

بهاره فیضی

عضویت از 1392/11/03

مشکل ajax.beginform در هنگام اختصاص دادن layout_ (تکرار شدن المان های صفحه layout)

  • یکشنبه 23 خرداد 1395
  • 16:52
تشکر میکنم

سلام

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

@model ajaxbegin.Models.student

@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Create</h2>
<div id="ajaxBeginDiv">
    @using (Ajax.BeginForm("Create", "students", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "ajaxBeginDiv" }))
    { @Html.AntiForgeryToken()   <div class="form-horizontal">
        <h4>student</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.studentName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.studentName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.studentName, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
    }
</div>
<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

پس از فشردن دکمه ثبت درج به صورت ایجکسی صورت می گیره ولی مشکل این هست که پس از ثبت عناصر صفحه layout به صورت تکراری (هر کدام 2 بار) نمایش داده میشن، مثل شکل زیر

راه حل این مشکل چیست؟

با توجه به اینکه من نمی خوام از مودال استفاده کنم.

این هم یک سمپل هست که برای تست آماده کردم، اگه زحمت بکشید و دانلود کنید خودتون می تونید مشکل رو ببینید.

http://s000.tinyupload.com/?file_id=60762732248017858668

ممنون می شم راهنمایی کنید. راستش من این سوال رو هم در سایت asp.net، هم stackoverflow و هم سایت برنامه نویس پرسیدم ولی تا کنون که جوابی بهم ندادن، امیدوارم اینجا جواب بگیرم.

یعنی ممکنه اصلاً استفاده از layout اینجا اشتباه باشه؟

البته این هم مدل هست

public class student
    {
        [Key]
        public int studentID { get; set; }

        [Required]
        public string studentName { get; set; }
    }

و این هم اکشن create که در کنترلر students هست

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "studentID,studentName")] student student)
        {
            if (ModelState.IsValid)
            {
                db.students.Add(student);
                db.SaveChanges();
                //return RedirectToAction("Index");
            }

            return View(student);
           
        }

و فایل layout هم که من هیچ تغییری ندارم، همونی هست که به طور پیش فرض موقع ایجاد اپلیکیشن mvc ساخته می شه.

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

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

ایمان مدائنی

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

  • یکشنبه 23 خرداد 1395
  • 17:16

کد رو به شکل زیر اصلاح کنید

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "studentID,studentName")] student student)
        {
            if (ModelState.IsValid)
            {
                db.students.Add(student);
                db.SaveChanges();
                //return RedirectToAction("Index");
            }
 
            return PartialView(student);
            
        }

 

کاربر سایت

بهاره فیضی

عضویت از 1392/11/03

  • یکشنبه 23 خرداد 1395
  • 17:50

سلام، ممنون از توجهتون به تاپیک

این رو قبلاً امتحان کرده بودم ولی مشکل باقی بود، الان هم دوباره امتحان کردم هنوز همون مشکل وجود داره

من موقع اجرا همون ویوی create رو اجرا می گیرم

http://localhost:5608/students/Create

اگه لطف کنید سمپل رو دانلود و تست کنید ممنون میشم.

کاربر سایت

بهاره فیضی

عضویت از 1392/11/03

  • دوشنبه 24 خرداد 1395
  • 22:56

return partialview هم زدم باز همون مشکل وجود داشت

فقط وقتی UpdateTargetID رو برداشتم این مشکل حل شد، البته چون اینجا من به UpdateTargetID نیازی نداشتم برداشتنش ایرادی نداره ولی به هر حال ممکنه جایی لازم باشه و بنابراین این یک مسکن موقت بود اینجا.
یه راه حل دیگه هم اینه که بعد از ثبت کاربر رو به یک view دیگه بفرستم ولی خوب من نمی خواستم اینجا همچین کاری کنم. نهایت می خواستم فرم ثبت رو hidden کنم و پیغام موفقیت رو تو همون view نمایش بدم.

شما می تونید مثال کاملی که از ajax.beginform و اختصاص layout استفاده شده باشه برام بزارید؟

کاربر سایت

ایمان مدائنی

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

  • سه شنبه 25 خرداد 1395
  • 08:24

بررسی میکنم

اگر نمونه ای داشتم ضمیمه میکنم

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

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

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

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