by Guest » 16 Jan 2025, 07:14
Ich habe eine Funktion mit den folgenden Definitionen, die erste ist die Standardeinstellung und die zweite ist der POST:
Code: Select all
public IActionResult TenantTBMapping(int tenantId)
[HttpPost]
public IActionResult TenantTBMapping(TenantTBMappingViewModel model)
Das Modell ist wie folgt definiert:
Code: Select all
public class TenantTBMappingViewModel
{
public int TenantId { get; set; }
public List Details { get; set; }
public List? ToNames { get; set; }
public List? Inputs { get; set; }
public List? MappingTables { get; set; }
}
Und ich habe dieses Standard-HiddenFor im Formular der Seite:
Code: Select all
@using (Html.BeginForm("TenantTBMapping", "Settings", FormMethod.Post))
{
@Html.HiddenFor(model => model.TenantId);
// ...
}
Soweit ich das beurteilen kann, ist das alles normal und sieht aus wie die gleichen Seiten, die ich hunderte Male erstellt habe. Aber aus irgendeinem Grund kann die TenantId-Eigenschaft nicht gebunden werden und gibt immer eine 0 aus. Wenn ich den Wert direkt mit
aus dem Formular ziehe
Code: Select all
var test = Request.Form["TenantId"];
es gibt sogar den richtigen Wert zurück, also liegt es an der Modellbindung.
Das Einzige, was ich erraten kann, ist die Struktur des Formulars bringt irgendwie die TenantId-Bindung durcheinander. Wie Sie sehen können, enthält das Modell mehrere Listenfelder, obwohl das einzige vom Formular zurückgegebene Feld „Details“ ist. Ich habe Bearbeitungsfelder für jede Eigenschaft jedes Eintrags in Details (d. h. Model.Details
.MappingConfigId), und die Details und ihre Felder sind korrekt bindend.
Dies verwendet ASP.NET Core 8 MVC.
BEARBEITEN: Ich habe versucht, alles aus dem Formular zu löschen, außer dem ausgeblendeten Feld und dem korrekt gebundenen Wert, es liegt also definitiv an der Formularstruktur. Es ist etwas komplex, auf SO zu posten, aber ich werde mein Bestes geben, um ein Beispiel bereitzustellen.
Ich habe eine Komponente, die eine Liste einer Klasse namens EditConfiguration akzeptiert, und Dadurch werden meine bearbeitbaren Felder generiert. Auch hier funktionieren die Felder selbst einwandfrei, sie stören lediglich irgendwie die Bindung von TenantId. Ich kann weitere Details zu dieser Komponente/Klasse posten, wenn das hilft.
Code: Select all
@Html.HiddenFor(model => model.TenantId);
@for (int i = 0; i < Model.Details.Count; i++)
{
MappingConfigDetail detail = Model.Details[i];
string prefix = "Model.Details[" + i.ToString() + "].";
@Model.ToNames[i]
@await Component.InvokeAsync("Edit", new { config = new List() {
new EditConfiguration() {/*params for my EditConfiguration class*/ },
Edit 2: Screenshot der Nutzlast
[img]
https://i.sstatic.net /LRh8cVfd.png[/img]
Ich habe eine Funktion mit den folgenden Definitionen, die erste ist die Standardeinstellung und die zweite ist der POST:
[code]public IActionResult TenantTBMapping(int tenantId)
[HttpPost]
public IActionResult TenantTBMapping(TenantTBMappingViewModel model)
[/code]
Das Modell ist wie folgt definiert:
[code]public class TenantTBMappingViewModel
{
public int TenantId { get; set; }
public List Details { get; set; }
public List? ToNames { get; set; }
public List? Inputs { get; set; }
public List? MappingTables { get; set; }
}
[/code]
Und ich habe dieses Standard-HiddenFor im Formular der Seite:
[code]@using (Html.BeginForm("TenantTBMapping", "Settings", FormMethod.Post))
{
@Html.HiddenFor(model => model.TenantId);
// ...
}
[/code]
Soweit ich das beurteilen kann, ist das alles normal und sieht aus wie die gleichen Seiten, die ich hunderte Male erstellt habe. Aber aus irgendeinem Grund kann die TenantId-Eigenschaft nicht gebunden werden und gibt immer eine 0 aus. Wenn ich den Wert direkt mit
aus dem Formular ziehe[code]var test = Request.Form["TenantId"];
[/code]
es gibt sogar den richtigen Wert zurück, also liegt es an der Modellbindung.
Das Einzige, was ich erraten kann, ist die Struktur des Formulars bringt irgendwie die TenantId-Bindung durcheinander. Wie Sie sehen können, enthält das Modell mehrere Listenfelder, obwohl das einzige vom Formular zurückgegebene Feld „Details“ ist. Ich habe Bearbeitungsfelder für jede Eigenschaft jedes Eintrags in Details (d. h. Model.Details[i].MappingConfigId), und die Details und ihre Felder sind korrekt bindend.
Dies verwendet ASP.NET Core 8 MVC.
BEARBEITEN: Ich habe versucht, alles aus dem Formular zu löschen, außer dem ausgeblendeten Feld und dem korrekt gebundenen Wert, es liegt also definitiv an der Formularstruktur. Es ist etwas komplex, auf SO zu posten, aber ich werde mein Bestes geben, um ein Beispiel bereitzustellen.
Ich habe eine Komponente, die eine Liste einer Klasse namens EditConfiguration akzeptiert, und Dadurch werden meine bearbeitbaren Felder generiert. Auch hier funktionieren die Felder selbst einwandfrei, sie stören lediglich irgendwie die Bindung von TenantId. Ich kann weitere Details zu dieser Komponente/Klasse posten, wenn das hilft.
[code]@Html.HiddenFor(model => model.TenantId);
@for (int i = 0; i < Model.Details.Count; i++)
{
MappingConfigDetail detail = Model.Details[i];
string prefix = "Model.Details[" + i.ToString() + "].";
@Model.ToNames[i]
@await Component.InvokeAsync("Edit", new { config = new List() {
new EditConfiguration() {/*params for my EditConfiguration class*/ },
[/code]
Edit 2: Screenshot der Nutzlast
[img]https://i.sstatic.net /LRh8cVfd.png[/img]