Laden...

Razor Pages - BindProperty mit gleichem Namen auf PartialViews haben nach Post die gleichen Werte

Erstellt von WarLorD_XaN vor 4 Jahren Letzter Beitrag vor 4 Jahren 957 Views
W
WarLorD_XaN Themenstarter:in
113 Beiträge seit 2006
vor 4 Jahren
Razor Pages - BindProperty mit gleichem Namen auf PartialViews haben nach Post die gleichen Werte

Hallo

ich hänge gerade an einem Problem wo ich nicht weiß wie ich das lösen soll.

Verwendete Technologie: ASP .NET Core 2.2 Razor Pages

Ich habe eine Page. Auf dieser Page ist ein form. Im form gibt es 2 partial views, welche inputs enthalten.
Beide partial views haben je ein anderes Property des PageModel als Model, sind jedoch vom selben Datentyp.

Wird die Page angezeigt passt noch alles.
Im OnPost haben jedoch beide Properties des Page Models die selben Werte.

Wie löse ich das am besten?
Ich habe ja ein partial view weil ich keinen Code duplizieren will.

Zur besseren Veranschaulichung hier noch etwas Code:
Das PageModel:


public class Ship
{
    public string Name { get; set; }
    public string Crew { get; set; }
}

public class IndexModel : PageModel
{
    [BindProperty]
    public Ship FirstShip { get; set; }
    [BindProperty]
    public Ship SecondShip { get; set; }

    public void OnGet()
    {
        FirstShip = new Ship
        {
            Name = "USS Enterprise",
            Crew = "200-500"
        };
        SecondShip = new Ship
        {
            Name = "USS Voyager",
            Crew = "150"
        };
    }
    public void OnPost()
    {
        //  FirstShip und SecondShip have the same values
    }
}

Die Page:

@page
@model IndexModel

<form method="post">
    <partial name="/Pages/_ShipEdit.cshtml" model="Model.FirstShip" />
    <partial name="/Pages/_ShipEdit.cshtml" model="Model.SecondShip" />
    <input type="submit" value="save" />
</form>

Das partial view "_ShipEdit.cshtml"


@model Ship

<div>
    <label asp-for="Name"></label>
    <input asp-for="Name" />
</div>
<div class="form-group">
    <label asp-for="Crew"></label>
    <input asp-for="Crew" />
</div>

Vielen Dank für eure Hilfe,
sg xan