با سلام
برای فعال سازی ایمیل کاربر بعد از ثبت نام در کنترلر :
public async Task<IActionResult> ActiveEmailAccount(EmailActiveAccountViewModel active)
{
ViewBag.IsActive = await _userService.ActiveAccount(active);
return View(active);
}وقتی می خوام چک کنم ببینم تابع درست کار میکنه در این لینک
هر کاری میکنم ورودی null میگیرد
میدونم سوال خیلی مبتدی است ولی میخوام مغهوم view bag رو توی ویو درک کنم اول از همه
.و اینکه توی ویو وقتی if گذاشتیم از ویو به کنترلر باید برود دیگه ؟ پس چرا وقتی این لینک رو میزنم که برم تریس کنم همش null داخل میشه ؟
کد : از داخل دیتا بیس برداشتم
https://localhost:44385/account/ActiveEmailAccount/ddd8915deba74659be3ca89fdc118f14سرویس:
public async Task<ActiveEmailResult> ActiveAccount(EmailActiveAccountViewModel active)
{
var activeEmailExist=await _userRepository.CheckEmailActiveCode(active.EmailActiveCode);
var user = await _userRepository.GetUserByEmail(active.EmailActiveCode);
if (activeEmailExist)
{
user.UserState = UserState.Active;
_userRepository.UpdateUser(user);
await _userRepository.SaveChange();
return ActiveEmailResult.Success;
}
return ActiveEmailResult.NotActive;
}
ویو مدل:
[Display(Name = "عنوان")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[MaxLength(200, ErrorMessage = "{0} نمی تواند بیشتر از {1} کاراکتر باشد .")]
public string EmailActiveCode { get; set; }
public enum ActiveEmailResult
{
Error,
NotFound,
Success
}
و داخل ویو هم اینه :
@model AryanITC.Domain.ViewModels.Account.EmailActiveAccountViewModel
....
<div class="container">
@if (ViewBag.IsActive)
{
<div class="alert alert-success"> .حساب شما با موفقیت فعال شد</div>
<p>
<a href="/login"></a>
</p>
}
else
{
<div class="alert alert-success"> کاربری با مشخصات ارسال شده یافت نشد.</div>
}
</div>
در واقع هم سوالم اینه چرا null بر میگرده همش ؟ چی رو اشتباه دادم که از ورودی نمی گیره ؟
و اینکه وقتی خروچی تابع اصلی ActiveEmailResult.Error است الان این دیکه true/false نیست درسته ؟ چی باید دقیقا چک بشه در ورودی؟و چطوری ؟ با viewdata/viewbag?
سلام دوست عزیز وقت بخیر
ورودی های اکشن شما نال همشون؟
بله هر کاری میکنم حتی rout هم می دم موقع برک پوینت گذاشتن اصلا active code که از توی دیتا بیس اوردم برای تست وارد کنترلر نمیشه . و همه اش null وارد میشه : مثال:
https://localhost:44385/account/ActiveEmailAccount/8e8d24e8635a4c229ae03dfcbbf919ac
ورودی هم ویو مدل تعریف کردم کهه فقط یه string هست به نام EmailActiveAccountViewModel
public class EmailActiveAccountViewModel
{
public string EmailActiveCode { get; set; }
}
public enum ActiveEmailResult
{
Success,
NotActive,
Error,
}
دوست من route ای که برای action تعریف کردین رو لطفا بفرستید
اصلا route میذارم که وارد نمی شه ولی برمیدارم وارد میشه برک پوینت و null
و چون تابع اصلا خروجی ای نداره httpget هست دیگه درسته ؟ که اونم نمی دارم
[Route("Active")]
استاد گویا باید لینک رو این طوری چک کنیم:
https://localhost:44385/active?EmailActiveCode=8e8d24e8635a4c229ae03dfcbbf919acاین طوری می کنم درسته و وارد میشه توی تابع و user state هم تغییر میکنه . یعنی درست انحام میشه .
فقط الان سوالم اینه که چون توی کنترلر چک کردم با سوییچ کیس
دیگه تو ویو نباید این حالت ها چک بشه؟
چیزی که تو ویو نمایش داده میشه فقط کلمه success/ error/ notfound هست با هر جی داخل تگ p نوشته شده
چطور میشه برای اینها پیغام تعریف کرد؟
توی enum هم display میدم نمیشه
استاد این برای mvc هست یا میشه اینجا توی ویوو هم استفاده کرد که همون متن خطا توی کنترلر رو بیاره:
@ViewData.ModelState["CustomError"].Errors[0].ErrorMessage کاربرگرامی ! لطفا به پیام صوتی زیر گوش دهید.
خیلی حیلی ممنون چقدر عالی قسمت rout رو توضیح دادید کاملا متوجه شدم