ورود

View Full Version : اعتبارسنجی ویو با مدل دینامیک



resident
چهارشنبه 28 اسفند 1392, 18:07 عصر
سلام.
من ویوی زیر رو دارم که مدلش دینامیکه.

<div class="col-md-12">
<div class="panel panel-primary">
<div class="panel-body">
<div class="form-group">
<div class="col-md-2">
@Html.Label("PersonCompany_Affiliation_AffiliationID", new { @class = "control-label" })
</div>

<div class="col-md-8">
@Html.DropDownList("PersonCompany_Affiliation_AffiliationID", (MultiSelectList)(ViewData["Affiliationlist"]), "انتخاب کنید", new { @class = "form-control chosen-select" })
</div>

<div class="col-md-2">
@Html.ValidationMessage("PersonCompany_Affiliation_AffiliationID")
</div>
</div>

<div class="form-group">
<div class="col-md-2">
@Html.Label("PersonCompanyParent_PersonCompanyID", new { @class = "control-label" })
</div>

<div class="col-md-8">
@Html.DropDownList("PersonCompanyParent_PersonCompanyID", (MultiSelectList)(ViewData["Companylist"]), "انتخاب کنید", new { @class = "form-control chosen-select" })
</div>

<div class="col-md-2">
@Html.ValidationMessage("PersonCompanyParent_PersonCompanyID")
</div>

</div>
<div id="OtherDetailPersonAffiliationDiv"></div>

<div id="buttonsDiv">
<button type="submit" id="btnSubmit" class="btn-primary btn">ثبت</button>
<button type="button" id="btnCancel" onclick="ClosePersonCompanyAffiliationForm()" class="btn-primary btn">انصراف</button>
</div>
</div>

</div>

</div>
این ویو ajax ای داخل فرم دیگه ای برای ورود اطلاعات باز میشه و ثبت اطلاعات این فرم ، مجزا از فرم اصلی است.
چطور می تونم اعتبارسنجی شو انجام بدم؟ فیلدهای اجباری، طول فیلدها، کاراکترهایی که نمی تونه وارد کنه و ...

Cybersilent
پنج شنبه 29 اسفند 1392, 09:47 صبح
امیدوارم مطالعه این مطلب بهتون کمک کنه:

ASP.NET MVC Client Side Validation With Dynamic Contents
http://weblogs.asp.net/imranbaloch/archive/2010/07/11/asp-net-mvc-client-side-validation-with-dynamic-contents.aspx

که در واقع روشی برای ایجاد فرم های ثبت نام چند مرحله ای ارائه می کند.

alireza_s_84
پنج شنبه 29 اسفند 1392, 11:06 صبح
سلام.
من ویوی زیر رو دارم که مدلش دینامیکه.

<div class="col-md-12">
<div class="panel panel-primary">
<div class="panel-body">
<div class="form-group">
<div class="col-md-2">
@Html.Label("PersonCompany_Affiliation_AffiliationID", new { @class = "control-label" })
</div>

<div class="col-md-8">
@Html.DropDownList("PersonCompany_Affiliation_AffiliationID", (MultiSelectList)(ViewData["Affiliationlist"]), "انتخاب کنید", new { @class = "form-control chosen-select" })
</div>

<div class="col-md-2">
@Html.ValidationMessage("PersonCompany_Affiliation_AffiliationID")
</div>
</div>

<div class="form-group">
<div class="col-md-2">
@Html.Label("PersonCompanyParent_PersonCompanyID", new { @class = "control-label" })
</div>

<div class="col-md-8">
@Html.DropDownList("PersonCompanyParent_PersonCompanyID", (MultiSelectList)(ViewData["Companylist"]), "انتخاب کنید", new { @class = "form-control chosen-select" })
</div>

<div class="col-md-2">
@Html.ValidationMessage("PersonCompanyParent_PersonCompanyID")
</div>

</div>
<div id="OtherDetailPersonAffiliationDiv"></div>

<div id="buttonsDiv">
<button type="submit" id="btnSubmit" class="btn-primary btn">ثبت</button>
<button type="button" id="btnCancel" onclick="ClosePersonCompanyAffiliationForm()" class="btn-primary btn">انصراف</button>
</div>
</div>

</div>

</div>
این ویو ajax ای داخل فرم دیگه ای برای ورود اطلاعات باز میشه و ثبت اطلاعات این فرم ، مجزا از فرم اصلی است.
چطور می تونم اعتبارسنجی شو انجام بدم؟ فیلدهای اجباری، طول فیلدها، کاراکترهایی که نمی تونه وارد کنه و ...

بعد از افزودن محتوا داینامیک به صفحه ، با دو خط کد زیر کار شما راه میفته:
$('form').removeData('validator');
$.validator.unobtrusive.parse($('form'));

در دو خط کد بالا تمامی فرمهای موجود در صفحه ابتدا منفصل از پلاگین و بعد دوباره بایند میشن ، اگر فرم خاصی مد نظر باشه خب طبیعتا باید سلکتور شما به اون فرم خاص اشاره بکنه.

هروقت محتوایی توسط Ajax یا هر محتوایی که بصورت داینامیک به صفحه اضافه میشه برای مقید کردن پلاگین اعتبارسنجی کافیه تا دوباره پلاگین اعتبارسنجی رو به اون بایند بکنید ، نه فقط در مورد اعتبارسنجی بلکه همه ی پلاگین ها رو به این ترتیب میشه بایند کرد.
برای مثال اگه از پلاگینی با اسم AutoSize اسفاده کرده باشیم و حالا محتوایی دینامیک به صفحه اضافه شد میتونیم به شکل زیر عمل بایند کردن رو به اون کد HTML ایی که اضافه شده انجام بدیم:

success: function (data) {
if (data.success) {
var newContent = $(data.html);
$('#Target').append(newContent);
newContent.find('textarea').Autosize();
}
else {
$parent.hide();
}
}

فقط نکته ی مهم اینه که بعد از اضافه کردن محتوای به Dom عمل بایند کردن پلاگین ها رو انجام بدین.
موفق باشید

resident
پنج شنبه 29 اسفند 1392, 11:59 صبح
alireza_s_84 (http://barnamenevis.org/member.php?35861-alireza_s_84) : ممنون از توضیحاتتون.
در مورد فرم من چطور میشه؟ ببخشید یه مقدار دارم گیج میزنم... متوجه نمی شم :(