سلام
استاد برای عضویت در خبرنامه من از ویو کامپوننت استفاده کردم ولی چون void هست ویو کامپوننت بهم اررور ویو و return رو میده
میشه راهنمایی بفرمایید؟
public interface INewsletterService
{
void AddEmailForNewsletter(string email);
}
public class NewsletterService : INewsletterService
{
private PipeLandProjectContext _context;
public NewsletterService(PipeLandProjectContext context)
{
_context = context;
}
public void AddEmailForNewsletter(string email)
{
var news = new Newsletter();
news.Email = email;
_context.Add(email);
_context.SaveChanges();
}
}
public class NewsletterViewComponent : ViewComponent
{
private INewsletterService _newsletterService;
public NewsletterViewComponent(INewsletterService newsletterService)
{
_newsletterService = newsletterService;
}
public async Task<IViewComponentResult> InvokeAsync(string email)
{
return await Task.FromResult((IViewComponentResult)View("NewsletterViewComponent", _newsletterService.AddEmailForNewsletter(email)));
}
}
@model PipeLandProject.DataLayer.Entities.Newsletter.Newsletter
@{
}
<form class="form-inline my-4" method="post">
<div class="input-group w-100">
<div class="input-group-append">
<button class="input-group-text" id="email-addon1">
<i class="fa fa-envelope" aria-hidden="true"></i>
</button>
</div>
<input asp-for="@Model.Email" type="email" class="form-control" placeholder="برای عضویت در خبرنامه ایمیل وارد کنید" aria-label="email" aria-describedby="email-addon1">
</div>
<br />
</form>
سلام دوست عزیز
من دلیلی برای استفاده از ViewComponnent برای بخش خبرنامه نمیبینم چون قرار نیست بارها و چندجا هم ازش استفاده کنید! حتی ویو شما اصلا نیازی به ViewModel توی خودش نداره ! شما توی صفحه صرفا نیاز دارید که یک Email رو به سمت کنترلر ارسال کنید
من پیشنهاد میکنم برای تمیزی کار از یه PartialView استفاده کنید (بدون Model ورودی) ، به Input خودتون Name و Id بدید و وقتی فرم post میشه داخل کنترلر همون id یا name رو توی پارامتر ورودی متد خودتون بگیرید و کاری که لازمه رو انجام بدید، میتونید PartialView خودتون رو توی Layout فراخوانی کنید که توی همه صفحه ها هم داشته باشیدش
دیگه فکرنمیکنم نیاز به انجام کار اضافه تری باشه
موفق باشید