Форма отправки с обработчиком страниц частичных страниц. net ядро - PullRequest
0 голосов
/ 12 марта 2020

У меня есть требование, например, вызвать частичную страницу (_DataDiffs.cs html) с кнопкой asp -page-handler = "UpdateData". когда я вызываю из DataCorrectionpage (@await Html .PartialAsyn c ("_DataDiffs", Model) данные отображаются нормально. Когда я нажимаю на обработчик = "Данные кнопки UpdateData не отправляются в метод OnPostUpdateData ().

Пожалуйста, помогите в этом. Спасибо заранее Eswar

@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; }
}

1 Ответ

0 голосов
/ 13 марта 2020

Вам необходимо add a DataDiffs type parameter методу OnPostUpdateData для получения данных объекта, переданных представлением.

А если вы хотите передать DataDiffs в код, вам нужно add hidden controls на основе вашего кода для хранения содержимого каждого поля.

Измените свой _DataDiffs.cs html следующим образом:

@{
   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;
    }

Здесь результат отладки моего кода:

enter image description here

...