PDA

View Full Version : مشکل با Validate سمت کلاینت



SianiD
دوشنبه 14 مرداد 1392, 13:04 عصر
با سلام من تو یکی از صفحه هام قابلیت کامنت واسه مطلب هارو گذاشتم به این صورت که وقتی رو دکمه افزودن نظر کلیک میشه Div مربوط به کامنت باز میشه و من کامنتم رو میذارم .
وقتی بصورت معمولی کامنت بذاری مشکل نداره ، مشکل از جایی هست که یکی از فیلد ها Valid نباشند .

مشکلاتی که پیش میاد :
1- فکر میکنم سمت کلاینت ولید نمیشه و میره سرور با اینکه من واسش DataAnnotations نوشتم .
2- تمام فرم های روی صفحه با مقدار وارد شده پر میشن و همون خطا های اعتبار سنجی رو میده .


کد View :



@using (Html.BeginForm()
{
@Html.ValidationSummary(true)

<a href="#@item.Id" class="@ur" >+ افزودن نظر</a>
<div id="@item.Id" style="width: 250px;display:none;">

<div style="font-size: 10px;">
@Html.LabelFor(model => model.Name)
</div>
<div class="k-textbox" style="width: 150px;">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)

</div>
<div style="font-size: 10px;">
@Html.LabelFor(model => model.Family)
</div>
<div class="k-textbox" style="width: 150px;">
@Html.EditorFor(model => model.Family)

</div>
<div style="font-size: 10px;">
@Html.LabelFor(model => model.Email)
</div>
<div class="k-textbox" style="width: 150px;">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>

<div style="font-size: 10px;">
@Html.LabelFor(model => model.CmBody)
</div>
<div style="width: 150px;">
@Html.TextAreaFor(model => model.CmBody, new { style = "width:600px;", @maxlength = "290" })
@Html.ValidationMessageFor(model => model.CmBody)
</div>

<input type="hidden" name="Content_Fk" id="Content_Fk" value="@item.Id"/>
<p>
<input type="submit" class="k-button" value="ثبت" />
</p>

</div>

if (TempData["Success"] != null)
{
<div>
<p style="color:green;"><strong> @TempData["Success"].ToString()</strong></p>
</div>
}
if (TempData["Fail"] != null)
{
<div>
<p style="color:red;"><strong> @TempData["Fail"].ToString()</strong></p>
</div>
}
<script>

$(document).ready(function () {


var flag = true;
if(!flag)
{
$("#@item.Id").css("display", "block");
}

$(".@ur").click(function () {
if (flag) {
$("#@item.Id").css("display", "block");
flag = false;
}

else {
$("#@item.Id").css("display", "none");
flag = true;
}
});

});


</script>

}

</div>

hakim22
دوشنبه 14 مرداد 1392, 15:18 عصر
اول اینکه باید ValidationFor رو برای همه ی فیلدهایی که میخواهید Valid بودنش بررسی بشه بزارید. این یکی نداره !
@Html.EditorFor(model => model.Family)

دوم اینکه Validation جادو جنبل که نمیکنه ! یک اسکریپت رو اجرا میکنه که باید در انتهای فرم به اون Reference داده باشید.

مطمئن بشید در همین View این کد وجود داره :


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



این جاواسکریپت به صورت Unobtrusive عمل میکنه و اگر لینکش در یک View باشه عملیات Validation عمل میکنه در غیر این صورت هیچی

SianiD
دوشنبه 14 مرداد 1392, 16:08 عصر
اول اینکه باید ValidationFor رو برای همه ی فیلدهایی که میخواهید Valid بودنش بررسی بشه بزارید. این یکی نداره !
@Html.EditorFor(model => model.Family)

دوم اینکه Validation جادو جنبل که نمیکنه ! یک اسکریپت رو اجرا میکنه که باید در انتهای فرم به اون Reference داده باشید.

مطمئن بشید در همین View این کد وجود داره :


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



این جاواسکریپت به صورت Unobtrusive عمل میکنه و اگر لینکش در یک View باشه عملیات Validation عمل میکنه در غیر این صورت هیچی

من از Kendo استفاده کردم که با MVC 3 کار میکنه و دستور



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




رو نمیشناسه عزیز ، جادو جنبل نخواستم میره سمت سرور ولیدیشن انجام میشه اما میخوام بدونم حالا که bundle ندارم چطوری سمت کلاینت چک کنم ؟

younesdoost
دوشنبه 14 مرداد 1392, 16:41 عصر
سلام.
اگه MVC3 کار می کنید پس کدای زیر رو زیر خط لود کردن فایل jquery لود کنید.


<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

SianiD
دوشنبه 14 مرداد 1392, 16:45 عصر
سلام.
اگه MVC3 کار می کنید پس کدای زیر رو زیر خط لود کردن فایل jquery لود کنید.


<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>



خودش از DataAnnotation ها میخونه یا کار دیگه ای هم باید بکنم ؟

younesdoost
دوشنبه 14 مرداد 1392, 16:48 عصر
خودش از DataAnnotation ها میخونه یا کار دیگه ای هم باید بکنم ؟
نه.دیگه کار دیگه ای لازم نیست انجام بدید.DataAnnotation هاتون کار خودشون رو انجام میدن.مشکلی نیست انشا الله.

SianiD
دوشنبه 14 مرداد 1392, 17:08 عصر
ممنون حل شد ، فقط جسارتا یه سوال دیگه هم داشتم شما با Kendo کار کردید ؟

younesdoost
دوشنبه 14 مرداد 1392, 17:13 عصر
ممنون حل شد ، فقط جسارتا یه سوال دیگه هم داشتم شما با Kendo کار کردید ؟
خدا رو شکر.خواهش می کنم.نه متاسفانه من تا حالا با kendo کار نکردم.

نیکناز
چهارشنبه 16 مرداد 1392, 00:30 صبح
سلام
منم همین مشکلو دارم البته تو mvc4.

من تو _Layout.cshtml در انتها ، قبل تگ بسته body اینا رو گذاشتم :



@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@RenderSection("scripts", required: false)


ولی تو فایر باگ می بینم که این اسکریپت ها غیر فعالند .
چیز دیگه ای باید بزارم؟

younesdoost
چهارشنبه 16 مرداد 1392, 01:04 صبح
سلام.اون چیزی که تو فایرباگ تو تب اسکریپت آخرش قبل از بسته شدن تگ Body می بینید رو به ما نشون بدید لطفا.

نیکناز
چهارشنبه 16 مرداد 1392, 01:25 صبح
خوب راستش من رو تب html رفتم . و اونجا دیدم این اسکریپن ها غیر فعالند . عکسشو می زارم . البته مشکلم حل شد.
رفتم


"~/Scripts/jquery-migrate-1.1.1.min.js"

رو تو قسمت Bundle.Config اضافه کردم پروژه ام درست شد .




bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*",
"~/Scripts/jquery.validate*",
"~/Scripts/jquery-migrate-1.1.1.min.js"));