使用页面处理程序部分页面 .net 核心发布表单

Posting form with page handler partial pages .net core

我有一个要求,比如调用具有 asp-page-handler="UpdateData" 按钮的部分页面 (_DataDiffs.cshtml)。当我从 DataCorrectionpage(@await Html.PartialAsync("_DataDiffs", Model) 调用时,数据呈现良好。当我单击 handler="UpdateData 按钮时,数据未发布到 OnPostUpdateData() 方法。

请帮忙解决这个问题。 提前致谢 埃斯瓦尔

@model Handlers.DataCorrectionModel

<div>   
        @if (@Model.DataDiffs?.Count > 0)
        {
            foreach (var diff in @Model?.DataDiffs)
            {

                <div>
                    <input name="@diff.Id" type="checkbox" value="12" />12
                </div>

                <div>
                    <input name="@diff.Replace" type="checkbox" value="true" />true
                </div>
                <div>
                    <input name="@diff.Correct" type="checkbox" value="Correct" />Correct
                </div>
                foreach (var item in diff.Updates)
                {
                    <div>
                        <input name="@item.Update" type="checkbox" value="12" />12
                    </div>
                    <div>
                        <input name="@item.Update2" type="checkbox" value="true" />true
                    </div>
                    <div>
                        <input name="@item.Update3" type="checkbox" value="update3" />update3
                    </div>
                }
            }
        }
        <input type="submit" value="Update Order" name="btnRead" asp-page-handler="UpdateData" class="btn btn-primary" />
        <br />  
</div>  


    <div class="row">
        <form method="post">       
            @await Html.PartialAsync("_DataDiffs", Model)
        </form>
    </div>
    <div></div>

public DataCorrectionModel()
    {
        DataDiffs = new List<DataDiffs>()
        {
            new DataDiffs
            {
                Id=12,
                Correct="str",
                Replace = true,
                Updates = new List<Updates>()
                {
                    new Updates
                    {
                        Update=12,
                        Update2 =true,
                        Update3 = "update3"
                    }`enter code here`
                }
            }
        };
    }

    [BindProperty]
    public List<DataDiffs> DataDiffs { get; set; }
    public void OnGet()
    {

    }
    public void OnPost()
    {
    //my other posts
    }
    public void OnPostUpdateData()
    {         
        var diff = DataDiffs;
    }

public class DataDiffs
{
    public int Id { get; set; }
    public bool Replace { get; set; }
    public string Correct { get; set; }
    public List<Updates> Updates { get; set; }
}

public class Updates
{`enter code here`
    public int Update { get; set; }
    public bool Update2 { get; set; }
    public string Update3 { get; set; }
}

您需要add a DataDiffs type parameter到OnPostUpdateData方法来接收视图传递的对象数据。

而如果要将DataDiffs传递给后面的代码,则需要add hidden controls根据自己的代码来存储各个字段的内容。

把你的_DataDiffs.cshtml改成这样:

@{
   var i = 0;
}
<div>
    @if (@Model.DataDiffs?.Count > 0)
    {
        foreach (var diff in @Model?.DataDiffs)
        {

            <div>
                <input name="@diff.Id" type="checkbox" value="12" />12
                <input name="Id" type="hidden" value="@diff.Id" asp-for="@diff.Id" />
            </div>

            <div>
                <input name="@diff.Replace" type="checkbox" value="true" />true
                <input name="Replace" type="hidden" value="@diff.Replace" asp-for="@diff.Replace" />
            </div>
            <div>
                <input name="@diff.Correct" type="checkbox" value="Correct" />Correct
                <input name="Correct" type="hidden" value="@diff.Correct" asp-for="@diff.Correct" />
            </div>
            foreach (var item in diff.Updates)
            {
                <div>
                    <input name="@item.Update" type="checkbox" value="12" />12
                    <input name="Updates[@i].Update" type="hidden" value="@item.Update" asp-for="@item.Update" />
                </div>
                <div>
                    <input name="@item.Update2" type="checkbox" value="true" />true
                    <input name="Updates[@i].Update2" type="hidden" value="@item.Update2" asp-for="@item.Update2" />
                </div>
                <div>
                    <input name="@item.Update3" type="checkbox" value="update3" />update3
                    <input name="Updates[@i].Update3" type="hidden" value="@item.Update3" asp-for="@item.Update3" />
                </div>
                i++;
            }
        }
    }
    <input type="submit" value="Update Order" name="btnRead" asp-page-handler="UpdateData" class="btn btn-primary" />
    <br />
</div>

OnPostUpdateData 方法:

  public void OnPostUpdateData(DataDiffs dataDiffs)
    {
         var diff = dataDiffs;
    }

这是我的代码调试的结果: