【问题标题】:.Net Core Razor Pages - Partial View with multiple objects.Net Core Razor Pages - 具有多个对象的部分视图
【发布时间】:2020-05-08 14:24:33
【问题描述】:

我对 .Net Core、EF Core 和 Razor 页面还很陌生。

我有一个表单,它使用到剃须刀页面的帖子。页面模型有三个绑定属性,其中两个是EF Models(我使用继承只绑定安全属性),一个只是字符串:

 [BindProperty]
 public Models.BaseEvent _Event { get; set; }

 [BindProperty]
 [Display(Name = "Venue Search")]
 public string _VenueSearch { get; set; }

 [BindProperty]
 public Models.BaseVenue _Venue { get; set; }

然后我有一个表单,用于创建一个事件。添加有关活动的信息时,他们可以选择现有场地,使用场地搜索,或添​​加新场地。 _VenueSearch 只能在出现错误时自动重新填充表单。我使用 jquery 在字段上执行自动完成。

但是,我正在尝试将表单放入部分,但我不知道如何传入 _Event、_VenueSearch 和 _Venue?

<form method="post">
            <input id="venueid" type="hidden" asp-for="_Venue.VenueID" />
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="_Event.Name" class="control-label"></label>
                <input asp-for="_Event.Name" class="form-control" />
                <span asp-validation-for="_Event.Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Event.StartDateTime" class="control-label"></label>
                <input asp-for="_Event.StartDateTime" class="form-control" />
                <span asp-validation-for="_Event.StartDateTime" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Event.EndDateTime" class="control-label"></label>
                <input asp-for="_Event.EndDateTime" class="form-control" />
                <span asp-validation-for="_Event.EndDateTime" class="text-danger"></span>
            </div>
            <hr />
            <div id="search-container" class="form-group">
                <label asp-for="_VenueSearch" class="control-label"></label>
                <input id="venue" asp-for="_VenueSearch" class="form-control" />
                <span asp-validation-for="_VenueSearch" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Venue.Name" class="control-label">Venue Name</label>
                <input id="venue-name" asp-for="_Venue.Name" class="form-control" />
                <span asp-validation-for="_Venue.Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Venue.Address" class="control-label">Venue Address</label>
                <input id="venue-address" asp-for="_Venue.Address" class="form-control" />
                <span asp-validation-for="_Venue.Address" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Venue.City" class="control-label">Venue City</label>
                <input id="venue-city" asp-for="_Venue.City" class="form-control" />
                <span asp-validation-for="_Venue.City" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Venue.PostCode" class="control-label">Venue Postcode</label>
                <input id="venue-postcode" asp-for="_Venue.PostCode" class="form-control" />
                <span asp-validation-for="_Venue.PostCode" class="text-danger"></span>
            </div>
            <hr />
            <div class="form-group">
                <label asp-for="_Event.Description" class="control-label"></label>
                <textarea asp-for="_Event.Description" class="form-control"></textarea>
                <span asp-validation-for="_Event.Description" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Event.AgeRestriction" class="control-label"></label>
                <input asp-for="_Event.AgeRestriction" class="form-control" />
                <span asp-validation-for="_Event.AgeRestriction" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create Event" class="btn btn-primary" />
            </div>
        </form>

如何将它放在一个部分中,以便我仍然可以访问两个模型和字符串(_Event、_Venue 和 _VenueSearch。我没有包含与本文无关的 javascript 自动完成代码。

我想使用部分,因为我的创建/编辑页面将使用相同的表单,所以我看不出重复的意义。

提前感谢您的帮助

马特

【问题讨论】:

    标签: asp.net-core razor-pages


    【解决方案1】:

    您可以创建视图模型并包含从数据库中查询的对象,在加载局部视图时,直接将视图模型传递给局部视图:

    @await Html.PartialAsync("viewName", model:Model.YourModel)
    

    【讨论】:

    • 感谢您的回答。这正是我认为我必须做的。但是制作一个视图模型只是为了让我可以将对象传递给局部视图,这对我来说似乎很疯狂,可惜的是,局部视图无法访问标准页面视图所具有的相同数据。
    • 不是真的,你可以从cs代码加载部分视图:mikesdotnetting.com/article/325/…。这样您就不需要创建视图模型,直接从您的 EF 模型中更正数据,最后将数据传递给局部视图。
    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 2023-03-10
    • 2019-03-25
    • 2018-11-08
    • 2020-10-04
    • 2019-07-27
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多