سلام توی یکی از پیج های سایتم یک سری اطلاعات رو با ajax میفرستم به کنترلر
اما وقتی کد رو تریس میکنم کد ها کلا یه مدلی اجرا میشه !!!
مثلا خط اول اجرا میشه میره خط دوم بعد دوباره میره خط اول بعد میپره خط سوم بعد میره چهارم دوباره میپره خط دوم همین جوری قاطی پاتی میخونه کد ها
و مشکلی که ایجاد میشه اینه که با هر بار پرش کد به خط های بالایی مقدار این متغییر هایی که اومده به کنترلر null میشه !
کسی میدونه علتش چیه ؟
به احتمال زیاد تداخل در اسکریپت ها دارید
کمحل تعریف رفرنس ها رو تغییر دهید و مطمئن بشید اسکریپتی دوبار تعریف نشده باشه
آقای مهندس فکر کنم مشکل کدم رو فهمیدم اما نمیدونم چجوری باید حلش کنم
کد من در قسمت save 2 بار اجرا میشه !!!
و چون گذاشتمش توی try catch دفعه اول میره توی catch و ارور (An exception of type 'System.Data.Entity.Validation.DbEntityValidationException' occurred in EntityFramework.dll but was not handled in user code) میده و دفعه دوم کد رو ذخیره میکنه !
اون مشکل null بودن مقادیر هم بخاطر همین 2 بار اجرا شدن کد هست
این ارور برای چیه ؟
چرا باید دوبار اجرا بشه ؟
حتما درخواست 2 بار ارسال میشه که احتمالا تداخل اسکریپت هاست
2 بار ارسال نمیشه
ولی نمیدونم چرا اینجوریه
public ActionResult Sale(Sale sale, int productId, string price, string saleId) { var pId = productId; var pri = Convert.ToInt32(price.Replace(",", String.Empty)); var code = CodeGen(); sale.Price = pri; sale.DateTime = DateTime.Now; sale.TotalPrice = sale.Weight * pri; sale.TotalWeight = _saleRepository.TotalWeight(pId, sale.Weight); sale.Qty = _saleRepository.Qty(pId, sale.Weight); sale.Username = User.Identity.Name; _productRepository.Mojudi(sale.Weight, pId); sale.MessageId = code; _saleRepository.InsertSale(sale); UpdateAll.Refresh(); TempData["message"] = "ثبت با موفقیت انجام گردید"; ModelState.Remove("price"); ModelState.Remove("weight"); return View("Sale"); }
این کد من هست توی کنترلر
اسکریپ هم چیز خاصی ندارم همه رو هم غیر فعال کردم بازم اینجوریه
آقای مدائنی میشه راهنماییم بفرمایید
کد ها رو دیدم
چیزمشکوکی در کد نیست دوست من
کد های Repository رو بررسی کنید شاید مشکل انجاست
استاد من بعد از کلی بدبختی به این نتیجه رسیدم متد ارسال کد Ajax رو روی Get میزارم این اتفاق میافته !!!
وقتی روی POST میزارم اوکیه کد ها به ترتیب اجرا میشه اما نکته اینجاست که مقدار رو نمیتونم توی کنترلر بگیرم !!!
ممنون میشم یه راهنمایی بفرمایید که کارم بدجور گیر این داستانه
<script> function add() { $.ajax({ url: "Sale/New", type: "POST", data: { price: $('#price').val(), row: $('#Row').val() } }); } </script>
اینم کد اسکریت
با این کد مشکل جابجا اجرا شدن کد ها رو ندارم اما نمیتونم توی کنترلر مقدار ارسالی رو دریافت کنم !
اکشن شما 4 ورودی داره که شما دارید دو تا ارسال میکنید
بعد اولین پارامتر Complex هست که نمیتونید از اون استفاده کنید مگر json ارسال کنید
آها نه اکشن رو تغییر دادم الان ورودی هاش همین 2 تاییه که توی اسکریپت ارسال میکنم
همین 2 تا رو هم نمی تونم بگیرم توی کنترلر !
میشه راهنمایی بفرمایید چجوری از طریق json انجام بدم
public ActionResult Sale(Sale sale, string price, string row) { var pri = Convert.ToInt32(price.Replace(",", String.Empty)); sale.Price = pri; sale.DateTime = DateTime.Now; sale.TotalPrice = sale.Weight * pri; sale.TotalWeight = _saleRepository.TotalWeight(pId, sale.Weight); sale.Qty = _saleRepository.Qty(pId, sale.Weight); sale.Username = User.Identity.Name; _productRepository.Mojudi(sale.Weight, pId); sale.SaleRowId = Convert.ToInt32(row); sale.MessageId = code; _saleRepository.InsertSale(sale); UpdateAll.Refresh(); TempData["message"] = "ثبت با موفقیت انجام گردید"; ModelState.Remove("price"); ModelState.Remove("weight"); return View("Sale"); }
توی این اکشن چرا وقتی به خط
sale.TotalWeight = _saleRepository.TotalWeight(pId, sale.Weight);
میرسه میپره مجدد خط اول اکشن !
وقتی این اتفاق میافته اون 2 تا پارمتر که به کنترلر اومده از سمت view یکیش null میشه یکیش هنوز مقدار داره !!!!
آقای مهندس ممنون از شما
من با راهنمایی های شما کد هام اوکی شده فقط نمیدونم چرا اکشن من 2 بار اجرا میشه !
وقتی تریس میکنم توی Layout به کد
@RenderSection("scripts", false)
میرسه میپره سر خط اکشن و یکبار دیگه کد رو اجرا میکنه ! و باعث میشه 2 بار ذخیره بشه !
احتمالا تداخل اسکریپت دارید
چک کنید اسکریتی دوبار تعریف نشده باشه یا محلش درست باشه
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)