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

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

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

راهنمایی جهت حل مشکل در کدهای کنترلر

  • شنبه 23 تیر 1397
  • 09:38
تشکر میکنم

سلام توی یکی از پیج های سایتم یک سری اطلاعات رو با ajax میفرستم به کنترلر

اما وقتی کد رو تریس میکنم کد ها کلا یه مدلی اجرا میشه !!!

مثلا خط اول اجرا میشه میره خط دوم بعد دوباره میره خط اول بعد میپره خط سوم بعد میره چهارم دوباره میپره خط دوم همین جوری قاطی پاتی میخونه کد ها

و مشکلی که ایجاد میشه اینه که با هر بار پرش کد به خط های بالایی مقدار این متغییر هایی که اومده به کنترلر null میشه !

کسی میدونه علتش چیه ؟

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

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

ایمان مدائنی

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

  • شنبه 23 تیر 1397
  • 09:56

به احتمال زیاد تداخل در اسکریپت ها دارید 

کمحل تعریف رفرنس ها رو تغییر دهید و مطمئن بشید اسکریپتی دوبار تعریف نشده باشه

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • شنبه 23 تیر 1397
  • 11:56

آقای مهندس فکر کنم مشکل کدم رو فهمیدم اما نمیدونم چجوری باید حلش کنم

کد من در قسمت 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 بار اجرا شدن کد هست

این ارور برای چیه ؟

کاربر سایت

ایمان مدائنی

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

  • شنبه 23 تیر 1397
  • 12:02

چرا باید دوبار اجرا بشه ؟ 

حتما درخواست 2 بار ارسال میشه که احتمالا تداخل اسکریپت هاست

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • شنبه 23 تیر 1397
  • 12:18

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");
        }

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

اسکریپ هم چیز خاصی ندارم همه رو هم غیر فعال کردم بازم اینجوریه

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • شنبه 23 تیر 1397
  • 18:14

آقای مدائنی میشه راهنماییم بفرمایید

کاربر سایت

ایمان مدائنی

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

  • شنبه 23 تیر 1397
  • 18:22

کد ها رو دیدم 

چیزمشکوکی در کد نیست دوست من 

کد های Repository رو بررسی کنید شاید مشکل انجاست 

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • یکشنبه 31 تیر 1397
  • 15:30

استاد من بعد از کلی بدبختی به این نتیجه رسیدم متد ارسال کد Ajax رو روی Get میزارم این اتفاق میافته !!!

وقتی روی POST میزارم اوکیه کد ها به ترتیب اجرا میشه اما نکته اینجاست که مقدار رو نمیتونم توی کنترلر بگیرم !!!

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

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • یکشنبه 31 تیر 1397
  • 15:33
<script> 
    function add() {
        $.ajax({
            url: "Sale/New",
            type: "POST",
            data: {
                price: $('#price').val(), row: $('#Row').val()
            }
        });
    }
</script>

اینم کد اسکریت

با این کد مشکل جابجا اجرا شدن کد ها رو ندارم اما نمیتونم توی کنترلر مقدار ارسالی رو دریافت کنم !

کاربر سایت

ایمان مدائنی

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

  • یکشنبه 31 تیر 1397
  • 15:54

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

بعد اولین پارامتر Complex هست که نمیتونید از اون استفاده کنید مگر json ارسال کنید 

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • یکشنبه 31 تیر 1397
  • 17:28

آها نه اکشن رو تغییر دادم الان ورودی هاش همین 2 تاییه که توی اسکریپت ارسال میکنم

همین 2 تا رو هم نمی تونم بگیرم توی کنترلر !

میشه راهنمایی بفرمایید چجوری از طریق json انجام بدم

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • یکشنبه 31 تیر 1397
  • 17:52
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 میشه یکیش هنوز مقدار داره !!!!

کاربر سایت

ایمان مدائنی

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

  • یکشنبه 31 تیر 1397
  • 18:14

آموزش زیر رو ببینید 

ساخت SPA در MVC با Ajax و Web Api

کاربر سایت

sadeghpa80

عضویت از 1392/09/18

  • دوشنبه 1 مرداد 1397
  • 18:15

آقای مهندس ممنون از شما

من با راهنمایی های شما کد هام اوکی شده فقط نمیدونم چرا اکشن من 2 بار اجرا میشه !

وقتی تریس میکنم توی Layout به کد

@RenderSection("scripts",  false)

میرسه میپره سر خط اکشن و یکبار دیگه کد رو اجرا میکنه ! و باعث میشه 2 بار ذخیره بشه !

کاربر سایت

ایمان مدائنی

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

  • دوشنبه 1 مرداد 1397
  • 18:56

احتمالا تداخل اسکریپت دارید 

چک کنید اسکریتی دوبار تعریف نشده باشه یا محلش درست باشه 

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

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

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

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