繁体   English   中英

ASP.NET MVC View需要显示特定模型的数据,并同时为另一个模型获取输入数据

[英]ASP.NET MVC View needs to display data from a certain model and at the same time take input data for another model

我有一个视图,该视图使用动态对象从ViewModel中声明的多个模型中提取数据。 但是,在同一模型中,我试图通过表单接受用户输入。 正确显示了两个模型的数据,这两个模型也是动态对象的一部分。 但是我无法成功获取表单输入,因为我不断收到无法访问动态对象的错误。[并且这仅适用于表单。]

这是视图的外观

 @model dynamic
 @using ActionAugerMVC.ViewModels
 @addTagHelper "*,Microsoft.AspNetCore.Mvc.TagHelpers"
 <div class="course__title">
        @Model.item.PageTitle
 </div>


  <p class="course__desc">
         @Html.Raw(Model.item.PageText)
  </p>
  <div class="event__price">
        <h3>@Model.item.NoticeTitle</h3>
         <p>@Model.item.NoticeNeedItem</p>
         <button type="submit" class="btn btn-accent">
                        Get A Quote Now
         </button>
   </div>

   <h3 class="course_desc__title">Other Services</h3>
   <ul class="course_requirements__list multi-column">
    @foreach (var link in Model.data)
     {
       <li><i class="ion-android-arrow-forward"></i>  @Html.ActionLink((string)link.PageTitle, "Page", "Plumbing", new { id = link.ID, url = link.PageURL }) </li>
     }

   </ul>

  <div class="sidebar__item">
                        <p class="subheading">Instant Quote Request</p>
                        <form class="register__form" role="form" asp-controller="Plumbing" asp-action="Page" method="post">
                            <div class="text-danger" asp-validation-summary="All"></div>
                            <div class="form-group">

                                <label class="sr-only">Full Name </label>
                                 <input asp-for="@Model.quote.FullName" type="text" class="form-control" placeholder="Full name">
                            </div>
                         <div class="form-group">
                                <label class="sr-only">Your phone</label>
                                <input asp-for="@Model.quote.Phone" type="tel" class="form-control" placeholder="Your phone">
                                <span asp-validation-for="@Model.quote.Phone" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label class="sr-only">E-mail</label>
                                <input asp-for="@Model.quote.Email" type="email" class="form-control" placeholder="E-mail">
                                <span asp-validation-for="@Model.quote.Email" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label class="sr-only">Your Message</label>
                                <input asp-for="@Model.quote.Message" type="text" class="form-control" placeholder="Your Message">
                            </div>
                            <input type="submit" value="Get a Quote Now" class="btn btn-accent btn-block">


                        </form>
 </div> <!-- .sidebar__item -->

这就是控制器的样子:-

    public class PlumbingController : Controller
{
    private readonly ActionAugerDataContext actionAugerDbContext;
    private readonly UnitOfWork unitOfWork;
    private readonly PlumbingPageViewModel plumbingViewModel;



    public PlumbingController(ActionAugerDataContext context)
    {
        actionAugerDbContext = context;
        unitOfWork = new UnitOfWork(actionAugerDbContext);
        plumbingViewModel = new PlumbingPageViewModel(unitOfWork);
    }

    // GET: /<controller>/
    public IActionResult Index()
    {
        var data = plumbingViewModel.PlumbingContent;
        return View(data);
    }

    [HttpGet]
    [Route("plumbing/calgary-{url}")]
    public IActionResult Page(int ID, string url)
    {
        dynamic Page = new ExpandoObject();
        Page.item = unitOfWork.ContentRepository.GetById(ID);
        Page.data = plumbingViewModel.PlumbingContent;
        Page.cities = plumbingViewModel.Cities;
     //   Page.quote = plumbingViewModel.Quote;
        return View(Page);
    }

    [HttpPost]
    public IActionResult Page(Quote quote)
    {
        return View();
    }
}

这是视图模型:-

   public class PlumbingPageViewModel
   {
     public IEnumerable<Content> PlumbingContent { get; set; }
     public IEnumerable<Cities> Cities { get; set; }
     public Quote Quote { get; set; }

    public PlumbingPageViewModel(UnitOfWork unitOfWork)
    {
        PlumbingContent = unitOfWork.ContentRepository
            .GetAll()
            .Where(d => d.Section == "Plumbing")
            .Where(c => c.City == "Calgary");
        Cities = unitOfWork.CitiesRepository
            .GetAll()
            .Where(c => c.HomeCity == "Calgary");

     }
 }

这是表单的模型类。

   public class Quote
   {
     public int ID { get; set; }
     public string FullName { get; set; }
     public string Phone { get; set; }
     public string Email { get; set; }
     public string City { get; set; }
     public string Message { get; set; }
   }

您不能使用动态模型(@model dynamic)通过HtmlHelper构建表单

如果要发布表格,则应使用特定的模型。

希望你能这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM