PDA

View Full Version : حرفه ای: عدم کارکرد صحیح model binding پیش فرض mvc



chaalesh
پنج شنبه 11 تیر 1394, 16:37 عصر
با سلام
من یک صفحه ساده که یک مدل با ساختار زیر را

public class MyClass {
public string iddd { get; set; }
}
از کاربر گرفته و به action تحویل می دهد را نوشتم
این کد در local موردی نداره ولی توی یک هاست اشتراکی instance ای که دریافت می کنه خالیه
در کد زیر همیشه قسمت اول if اجرا میشه

[HttpPost]
public ActionResult Index(MyClass test)
{
if (string.IsNullOrEmpty(test.iddd))
return Redirect("/?id=1");
else
return Redirect("/?id=2");
}
132830
هر کاری کردم نتونستم علت این موضوع را بیابم
از vs 2013u4 استفاده کردم
برای string خودم ModelBinder ننوشتم
تمامی instance های دریافتی من در یک پروژه در اکشن های post این مشکل را دارند

مواردی که در جستجو ها بود کنترل کردم درست بودند
1- تعداد tag های فرم من جفت می باشد
2- فیلد من get و set دارد
3- توی صفحه هیچ چیر دیگه ای ندارم . الان صفحه من تنها عبارت زیر می باشد

<html dir="rtl">
<head>
</head><body dir="rtl">
<form action="/" method="post">
<input type="text" value="" id="iddd" name="iddd">
<button type="submit">send</button>
</form>
</body></html>
4-routing رو بررسی کردم موردی ندازه- در واقع POST اجرا می شه ولی داده نداره



ممنون میشوم از اساتید گرامی اگر کمک نمایند

مهدی کرامتی
پنج شنبه 11 تیر 1394, 17:02 عصر
یک نمونه که مشکل فوق در آن قابل مشاهده باشد ایجاد کنید و ضمیمه کنید تا بررسی شود.

chaalesh
پنج شنبه 11 تیر 1394, 17:13 عصر
قبل از همه چیز از پاسخ شما ممنونم
جسارتا این پروژه الان روی هاست http://itchi.ir با همان کدهایی که در بالا ذکر کردم آپلود هست
این کدها توی local موردی ندارند
ولی توی هاست اشتراکی به این مشکل برخورد کرده
اگر می فرمایید کدها را ارسال کنم براتون

r4hgozar
پنج شنبه 11 تیر 1394, 17:17 عصر
سلام.
خودتون route خاصس تعریف نکردین؟

chaalesh
پنج شنبه 11 تیر 1394, 17:21 عصر
نه.
یک سوال : اگر route مشکل داشته باشد action مربوطه run می شود ؟
الان در سایتی که آدرس دادم action اجرا می شود ولی ورودی را نمی خواند

مهدی کرامتی
پنج شنبه 11 تیر 1394, 17:25 عصر
پروژه را برای این خواستم که بتونم توی ویژوال استودیو خط به خط دیباگش کنم.

r4hgozar
پنج شنبه 11 تیر 1394, 17:27 عصر
چون من همین مشکل رو همین الان دارم.
وقتی واسه یه کنترلر route تعریف می کنم، می خوام بصورت ajax بهش مقداری رو پاس بدم کلا اون action رو نمی شناسه و ارور 404 میده.
الان 5 روزه درگیرشم.
اما کد شما به نظرم یه break بزار قبل اکشن ببین اصلا به اکشنت مقدار میرسه؟ اگه میرسه چی میرسه که نتیجه بررسیت اشتباه میشه.

chaalesh
پنج شنبه 11 تیر 1394, 17:48 عصر
این کد الان روی سیستم من موردی نداره
همه چی ok هست
حتی روی یک سرور دیگه هم آپلود کردم ok بود
بنده post back کامل تولید می کنم
توی لوکال همه چیز خوبه
ولی روی این هاست داره به مشکل می خوره

chaalesh
پنج شنبه 11 تیر 1394, 17:53 عصر
الان با vs یک پروژه جدید درست کردم
تنها کلاس زیر را به پروژه اضافه کردم



public class MyClass {
public string iddd { get; set; }
}


و اکشن زیر را به کنترلر home اضافه کردم

[HttpPost] public ActionResult Index(MyClass test)
{
if (string.IsNullOrEmpty(test.iddd))
return Redirect("/?id=1");
else
return Redirect("/?id=2");
}




و به index.cshtml قطه کد زیر را اضافه کردم

@model testapp2.Models.MyClass
و

@using (Html.BeginForm()){
<input type="text" value="" id="iddd" name="iddd" />


<button type="submit">send</button>
}




بازهم اجرا با اجرای local متفاوته و همینطور در هنگام post شدن اطلاعات را نمی تونه توی مدل مربوطه پرکنه
اجرا بر روی http://itchi.ir

chaalesh
پنج شنبه 11 تیر 1394, 18:01 عصر
آقای کرامتی عزیز اگر می خواهید user name , password هاست رو بدم خدمتتون
من فایل هایی را که روی پروؤه پیش فرض خود دات نت ویرایش کردم رو براتون ذکر کردم
الان دیگه نه routing اضافه ای داره نه چیز دیگه ای

yeganehaym
پنج شنبه 11 تیر 1394, 18:10 عصر
همانطور که تولید فرم را به خود mvc واگذر کردید
تولید input را از هم از طریق یک htmlhelper به آن واگذر کنید و نتیجه را اطلاع دهید

chaalesh
پنج شنبه 11 تیر 1394, 18:16 عصر
باز همان ایراد پابرجاست
من از
@Html.EditorFor(model => model.iddd)
برای تولید input استفاده کردم
ولی مشکل همچنان پابرجاست

chaalesh
پنج شنبه 11 تیر 1394, 18:18 عصر
اساتید گرامی آیا modelbider احتیاج به نصب چیزی در سرور دارد ؟
بجز .net framework چیز دیگری سمت سرور برای نصب نیاز می باشد ؟

yeganehaym
پنج شنبه 11 تیر 1394, 19:32 عصر
من همین کد رو در این آدرس نوشتم و پاسخ میده http://test.movieshare.ir به صورت دستی سعی کنید پارامتر ارسالی iddd را بخوانید در صورتی که دریافت نکردید، بعیدترین حدس ممکن این هست که IIS داره درخواست شما رو پالایش میکنه و مسئله مربوط به دات نت نمیشه

مهدی کرامتی
پنج شنبه 11 تیر 1394, 20:02 عصر
شما روی هاست تون نسخه پابلیش شده برنامه را قرار دادید. اون رو که نمیشه دیباگ کرد. نیاز به سورس است. در یک کنترلر جدا و در یک پروژه جدا همان مثال را بسازید و اینجا ضمیمه کنید.

ali_kolahdoozan
پنج شنبه 11 تیر 1394, 21:38 عصر
لطفا کل پروژه خود را یک جایی آپلود کنید و لینک بدهید تا درستش کنم برایتان . اینطوری نمیشه . احتمال مشکل در Routing شما زیاد است .