查看组件数据输入验证

时间:2019-09-20 23:33:33

标签: c# asp.net-core razor bootstrap-4

我一直在尝试使用ASP.NET Core中的视图组件来创建基于“小部件”的系统。我目前拥有的联系表单可以打开模式对话框,并根据他们所做的选择显示视图组件。为了简单起见,我从布局页面中按如下方式调用viewcomponent(是的,我没有使用vc:Convention atm):

@await Component.InvokeAsync("Inquiry")

然后它将通过此​​处调用查询表格:

public class InquiryViewComponent : ViewComponent
{
    private readonly ILogger<InquiryViewComponent> _logger;
    private readonly IServiceRepository _serviceRepository;

    public InquiryViewComponent(ILogger<InquiryViewComponent> logger, IServiceRepository serviceRepository)
    {
        _logger = logger;
        _serviceRepository = serviceRepository;
    }

    public async Task<IViewComponentResult> InvokeAsync()
    {
        // do stuff here like create a backing model and then return the view
        return await Task.FromResult(View("~/Views/Inquiry/Inquiry.cshtml", _viewModel));
    }
}

一切正常加载,并且模态对话框打开(有一个脚本可以在打开时调用模态),并具有以下内容:

@model InquiryViewModel

 //modal initialization here
 //modal header here

@using (Html.BeginForm("Inquiry", "Inquiry"))
{
<div class="modal-body">        
    <div class="container">
        <div class="row mb-2">
            <div class="col-md-6">
                @Html.LabelFor(m => m.Inquire.FirstName, new { @class = "required" })
                @Html.TextBoxFor(m => m.Inquire.FirstName, new { @class="form-control", autocomplete="given-name", required="required" })
            </div>
            <div class="col-md-6">
                @Html.LabelFor(m => m.Inquire.LastName, new { @class = "required" })
                @Html.TextBoxFor(m => m.Inquire.LastName, new { @class = "form-control", autocomplete = "family-name", required = "required" })
            </div>
        </div>
        //OTHER FIELDS HERE
</div>
//FOOTER
}

用户提交后,如果模型无效,它将回发到我不希望的视图查询中。我确实知道它正在尝试返回表单上的页面(我可以看到发生了什么)。我也了解我可以使用客户端验证,但我的目标是构建更复杂的小部件,并且不希望使用一堆JavaScript代码。我想知道的是:如果我有一个基于表单的视图组件,并且需要服务器进行模型验证,是否可以在不呈现页面的情况下返回结果?这种实现方式对于视图组件而言是否完全不正确,还有哪些其他方法更合适?

0 个答案:

没有答案