Asp.net core ASP.Netcore如何在另一个控制器(如HomeIndexView)中调用model/ViewModel
我有一个名为“GetInTouch”(联系我们表单)的模型及其控制器,可以很好地查看所有工作 我的问题是,当应用程序加载时,它有一个“主页/登录页”,我需要在有“HomeController”的登录页上显示此“GetInTouch”视图,而不是将其作为单独的页面显示。因此,从登录页“提交”后,它应该转到“GetInTouchController”并处理数据(保存和发送电子邮件),但返回时为空 下面是GetInTouch模型Asp.net core ASP.Netcore如何在另一个控制器(如HomeIndexView)中调用model/ViewModel,asp.net-core,model-view-controller,model,viewmodel-savedstate,Asp.net Core,Model View Controller,Model,Viewmodel Savedstate,我有一个名为“GetInTouch”(联系我们表单)的模型及其控制器,可以很好地查看所有工作 我的问题是,当应用程序加载时,它有一个“主页/登录页”,我需要在有“HomeController”的登录页上显示此“GetInTouch”视图,而不是将其作为单独的页面显示。因此,从登录页“提交”后,它应该转到“GetInTouchController”并处理数据(保存和发送电子邮件),但返回时为空 下面是GetInTouch模型 public class 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; }
}
这是GetInTouch控制器
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)
{
if(ModelState.IsValid)
{
_GetInTouch.GetInTouch.Add(intouch);
等待_GetInTouch.saveChangesSync();
//wait_emailService.SendTestEmail(选项);
返回重定向操作(nameof(Create),new{issucess=true,sendId=intouch.Id});
}
返回视图(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
@model project.Models.GetInTouch
联系
@如果(ViewBag.IsSuccess==true)
{
谢谢您的询问!我们将尽快与您联系
&时代;
}
联系我们
据我所知,如果您想从另一个视图发布数据,您可以在新视图中设置表单标记
它将根据输入标记生成表单数据并发布到GetInTouch视图
更多细节,您可以参考下面的测试演示
注意:您应该在输入标记中设置名称以匹配GetInTouch控制器:
将以下表单放入索引视图:
索引模型:
public class IndexViewModel
{
public GetInTouch GetInTouch { get; set; }
}
视图:
结果:
非常感谢您的回答,这很有帮助,这正是我要问的。很明显,我只是忘记了输入标签上的“名字”——谢谢你帮我解决了这个问题。我的代码现在正常工作。如果您觉得我的回复对您有所帮助,请将其标记为答案。这将帮助其他面临同样问题的人更容易找到答案。非常感谢。
public class IndexViewModel
{
public GetInTouch GetInTouch { get; set; }
}
<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="GetInTouch.YourName" name="YourName" autocomplete="nope" class="form-control" id="p_name" placeholder="Your Name" required="">
<span asp-validation-for="GetInTouch.YourName" class="text-danger"></span>
</div>
</div>
<div class="col-sm-6 col-md-6">
<div class="form-group">
<input type="email" asp-for="GetInTouch.EmailAddress" name="EmailAddress" autocomplete="new_email" class="form-control" id="p_email" placeholder="Your Email" required="">
<span asp-validation-for="GetInTouch.EmailAddress" class="text-danger"></span>
</div>
</div>
</div>
<div class="form-group">
<textarea id="p_message" asp-for="GetInTouch.YourMessage" name="YourMessage" class="form-control" rows="6" autocomplete="nope" placeholder="Your Message"></textarea>
<span asp-validation-for="GetInTouch.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>