使用页面处理程序部分页面 .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;
}
这是我的代码调试的结果:
我有一个要求,比如调用具有 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;
}
这是我的代码调试的结果: