سلام
من یک ویو دارم به این شکل
@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 بار) نمایش داده میشن، مثل شکل زیر
ممنون می شم راهنمایی کنید. راستش من این سوال رو هم در سایت 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 ساخته می شه.
کد رو به شکل زیر اصلاح کنید
[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); }
سلام، ممنون از توجهتون به تاپیک
این رو قبلاً امتحان کرده بودم ولی مشکل باقی بود، الان هم دوباره امتحان کردم هنوز همون مشکل وجود داره
من موقع اجرا همون ویوی create رو اجرا می گیرم
http://localhost:5608/students/Create
اگه لطف کنید سمپل رو دانلود و تست کنید ممنون میشم.
return partialview هم زدم باز همون مشکل وجود داشت
فقط وقتی UpdateTargetID رو برداشتم این مشکل حل شد، البته چون اینجا من به UpdateTargetID نیازی نداشتم برداشتنش ایرادی نداره ولی به هر حال ممکنه جایی لازم باشه و بنابراین این یک مسکن موقت بود اینجا.
یه راه حل دیگه هم اینه که بعد از ثبت کاربر رو به یک view دیگه بفرستم ولی خوب من نمی خواستم اینجا همچین کاری کنم. نهایت می خواستم فرم ثبت رو hidden کنم و پیغام موفقیت رو تو همون view نمایش بدم.
شما می تونید مثال کاملی که از ajax.beginform و اختصاص layout استفاده شده باشه برام بزارید؟
بررسی میکنم
اگر نمونه ای داشتم ضمیمه میکنم
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)