我有一个名为“GetInTouch”(联系我们表格)的模型及其控制器,并查看所有工作正常。
我的问题是,当应用程序加载时,它有一个“主页/登陆页面”,我需要在有一个“HomeController”的登陆页面上显示这个“GetInTouch”视图,而不是将它作为一个单独的页面。因此,在从着陆页“提交”时,它应该转到“GetInTouchController”并处理数据(保存和发送电子邮件),但它返回 null。
这是 GetInTouch 模型
public class GetInTouch
{
[Key]
public int Id { get; set; }
[Display(Name = "Your Name")]
public string YourName { get; set; }
[Display(Name = "Email Address")]
public string EmailAddress { get; set; }
[Display(Name = "Your Message")]
public string YourMessage { get; set; }
}
这是 GetInTouchController
public async Task<IActionResult> Create(GetInTouch intouch)
{
if (ModelState.IsValid)
{
_GetInTouch.GetInTouch.Add(intouch);
await _GetInTouch.SaveChangesAsync();
//await _emailService.SendTestEmail(options);
return RedirectToAction(nameof(Create), new { isSuccess = true, sendId = intouch.Id });
}
return View(intouch.Id);
}
和 GetInTouch 视图
@model project.Models.GetInTouch
<div class="container">
<h3 class="display-4">Get In Touch</h3>
<hr />
@if (ViewBag.IsSuccess == true)
{
<div class="alert alert-success alert-dismissible fade show" role="alert">
<strong>Thank You for your enquiry!</strong> We'll be in touch with you asap <br />
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
}
<div class="row mt-5">
<div class="col-sm-12 col-md-12">
<h2 class="section-heading text-primary text-center no-after mb-4">
Contact Us
</h2>
<form method="post" class="form-contact" autocomplete="nope" id="contactForm" data-toggle="validator" asp-action="Create" asp-controller="GetInTouch">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="row">
<div class="col-sm-6 col-md-6">
<div class="form-group">
<input type="text" asp-for="YourName" autocomplete="nope" class="form-control" id="p_name" placeholder="Your Name" required="">
<span asp-validation-for="YourName" class="text-danger"></span>
</div>
</div>
<div class="col-sm-6 col-md-6">
<div class="form-group">
<input type="email" asp-for="EmailAddress" autocomplete="new_email" class="form-control" id="p_email" placeholder="Your Email" required="">
<span asp-validation-for="EmailAddress" class="text-danger"></span>
</div>
</div>
</div>
<div class="form-group">
<textarea id="p_message" asp-for="YourMessage" class="form-control" rows="6" autocomplete="nope" placeholder="Your Message"></textarea>
<span asp-validation-for="YourMessage" class="text-danger"></span>
</div>
<div class="form-group">
<div class="text-center">
<div id="success"></div>
<input type="submit" value="SEND" class="btn btn-primary" />
</div>
</div>
</form>
</div>
</div>
</div
上面的代码工作正常,现在我想做的是在另一个视图中将这个“表单/视图”显示为一个部分(就在页脚之前),比如主页索引视图,但是当用户点击“发送”时,它当然应该去给GetInTouchController 创建动作和流程。
因此,我将视图从 GetInTouch 创建视图复制到页脚之前的主页索引视图,但主页/视图有一个视图模型名称“indexViewModel”,它列出了来自另一个模型的数据,但我知道你只能将一个模型传递给一个视图(所以没有办法说@model project.Model.GetInTouch,而是我在主页中有@model IndexViewModel)所以我想要的只是一旦用户完成表单并从主页视图中点击“发送”它就会转到'GetInTouchController' 创建操作并保存输入到 GetInTouch 模型中的所有详细信息并发送电子邮件(我有电子邮件功能)只需要保存数据,因为它全部返回为空。这是 IndexViewModel
public class IndexViewModel
{
//public IEnumerable<CategoryVM> Category { get; set; }
public GetInTouch GetInTouch { get; set; }
}
我不知道如何继续,我尝试将确切的 create 方法复制到 HomeController 并将表单指向 HomeController Create 操作,但这也不起作用 - 知道如何在另一个视图中处理表单吗?很抱歉它很长,但需要解释我想要实现的目标,希望它很清楚,并感谢您的时间。