با سلام
بنده فرم لاگین سایتمو به صورت مودال نمایش میدهم، اما وقتی از ولیدیشن به صورت کد زیر استفاده می کنم، برای نمایش خطا شکل فرم به هم میریزه
<span asp-validation-for="UserName" class="text-danger"></span>
ممنون میشم راهنمایی بفرمایید
*ویرایش شد*
کدهای صفحه لاگین
@model websitebuilder.Models.ViewModels.LoginViewModel
@{
Layout = null;
ViewData["Title"] = "- ورود";
}
<form asp-controller="Account" asp-action="Login" method="post" asp-route-returnUrl="">
<div class="modal-header" style="background-color:#22c383;">
<button type="button" class="close" data-dismiss="modal" aria-label="close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">ورود</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label asp-for="UserName" class="control-label"></label>
<input asp-for="UserName" class="form-control" />
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Password" class="control-label"></label>
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label asp-for="RememberMe" class="control-label">
<input asp-for="RememberMe"/>
@Html.DisplayNameFor(m => m.RememberMe);
</label>
</div>
</div>
</div>
<div class="modal-footer" style="text-align:left;">
<button class="btn btn-default" type="button" data-dismiss="modal">انصراف</button>
<button class="btn btn-success" type="submit">ورود</button>
</div>
</form>
کدهای ویو مادل مربوط به صفحه لاگین
public class LoginViewModel
{
[Display(Name ="نام کاربری")]
[Required(AllowEmptyStrings =false,ErrorMessage =PublicConst.EnterMessage)]
public string UserName { get; set; }
[Display(Name = "کلمه عبور")]
[Required(AllowEmptyStrings = false, ErrorMessage = PublicConst.EnterMessage)]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name ="مرا به خاطر بسپار")]
public bool RememberMe { get; set; }
}
کدهای نمایش فرم لاگین در صفحه اصلی به صورت مودال
@{await Html.RenderPartialAsync("_Modal", new BootstrapModel { ID = "load-login", Size = ModalSize.Small });}
@section PanelScript{
<script src="~/js/modal-js/login.js"></script>
}
این هم کدهای اکشن login
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl=null)
{
ViewData["returnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.UserName,
model.Password, model.RememberMe,lockoutOnFailure:false);
if (result.Succeeded)
{
// success login
var user = await _userManager.FindByNameAsync(model.UserName);
var userRole = _userManager.GetRolesAsync(user).Result.ToArray();
return RidirectToLocal(userRole, returnUrl);
}
{
//faild login
}
}
return View(model);
}
سلام بهتر بود کدهایی که نوشتید رو قرار می دادید. چون در اینجا فقط یک خط کد هست که ظاهرا هم درسته.
دقیقا نمیدونم بهم ریختن فرمتون چجوریه
ولی حدس میزنم با تغییر محل نمایش ارور مشکلوتون حل بشه.
مثلا ارور رو بالا یا پایین Input بزارید. نه رو به روش.
دوست عزیز، تغییرات شما رو اعمال کردم اما نشد
این تصویر فرم لاگین که به صورت مودال باز میشه:
اگر بدون وارد کردن نام کاربری و کلمه عبور بر روی ورود کلیک کنیم، به تصویر زیر هدایت می شویم:
توی اکشن Login در کنترلر شما گفتید اگر ModelState صحیح بود که لاگین رو انجام بده
اما اگر صحیح نبود گفتید return کن view رو. خب در اینجا قاعدتا یک ویو باید نمایش داده بشه نه یک پارشیال ویو
سلام. در زمانی که خطا رخ میده شما باید پارشیال ویو رو برگردونید نه ویو رو. در ضمن فرم مودال خودتون رو هم باید ایجکس ثبت کنید. میتونید از خود فرم استفاده کنید به این صورت
<form asp-controller="Account" asp-action="Login" id="frmLogin" data-ajax="true" data-ajax-method="POST" data-ajax-update="#ModalBody">
<!-- Modal -->
<div class="modal fade" id="Modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">لاگین</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="ModalBody">
</div>
<div class="modal-footer">
<button type="submit" class="btnK btn-success">ورود</button>
<button type="button" class="btnK btn-secondary btnCloseModal" data-dismiss="modal">بستن</button>
</div>
</div>
</div>
</div>
</form>
همچنین از کتابخانه های زیر هم برای ولیدیشن باید استفاده کرد jquery.validate.min.js - jquery.unobtrusive-ajax.min.js - jquery.validate.unobtrusive.js
ممنون حل شد، ولی یک تغییر در کد بالا نیاز هست.
در قسمت modal-content یک id تعریف کرده:
<div class="modal-content" id="modalcontent">
و در قسمت فرم آن را update می کنیم
data-ajax-update="#modalcontent"
اگر modal-content آپدیت شود 2 فرم مودال بر روی هم می افتد.
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
75
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
109
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1033
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
428
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4797
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
214
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
396
- پاسخ :
2
|
تاریخ :
1403/06/25
- ساعت :
11:39:00 PM
- بازدید :
567
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2008
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
75
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
109
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1033
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
428
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4797
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1160
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
597
- پاسخ :
1
|