Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core ASP.Netcore如何在另一个控制器(如HomeIndexView)中调用model/ViewModel_Asp.net Core_Model View Controller_Model_Viewmodel Savedstate - Fatal编程技术网

Asp.net core ASP.Netcore如何在另一个控制器(如HomeIndexView)中调用model/ViewModel

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 {

我有一个名为“GetInTouch”(联系我们表单)的模型及其控制器,可以很好地查看所有工作

我的问题是,当应用程序加载时,它有一个“主页/登录页”,我需要在有“HomeController”的登录页上显示此“GetInTouch”视图,而不是将其作为单独的页面显示。因此,从登录页“提交”后,它应该转到“GetInTouchController”并处理数据(保存和发送电子邮件),但返回时为空

下面是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">&times;</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>