2 Stimmen

Partielle Ansicht mit parametrisierten Präfixen für die Namen der Steuerelemente

Ich habe eine BarEditor.ascx, die von verschiedenen Stellen aus aufgerufen werden kann.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Models.Bar>" %>
<%= Html.TextBox("a") %>
...

Stellen Sie sich nun vor, dass ich zwei Objekte auf einer Seite bearbeiten muss Edit.aspx

    <form action="update">
        <div>
            <% Html.RenderPartial("BarEditor", ViewData["bar"]); %>
        </div>
        <div>
            <% Html.RenderPartial("BarEditor", ViewData["baz"]); %>
        </div>

        <input type="submit" value="Submit" />
    </form>

Dieser legt vor:

a=1&a=2

Ich muss es sein:

bar.a=1&baz.a=2

Wir können es also mit

public ActionResult Update(Bar bar, Bar baz)
{
    ...
}

Was ist ein bester Weg, um wiederverwendbare BarEditor.ascx zu schreiben, die Präfixe für Steuerelemente Namen generieren kann?

2voto

marc.d Punkte 3784

Erstellen Sie einfach eine ViewModel-Klasse für Ihren BarEditor und machen Sie ihn stark typisiert zu dieser neuen Klasse

z.B..

namespace ViewModel {
    public class BarEditor {

        string Prefix { get; set; }
        Models.Bar Bar { get; set; }
    }
}

Nun erstellen Sie Ihr Textfeld in BarEditor.ascx wie folgt

<%= Html.TextBox(Model.Prefix + ".a") %> 

und in Ihrer Ansicht fügen Sie den BarEditor wie folgt ein

 <form action="update">
    <div>
        <% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Bar", Bar = ViewData["bar"]}); %>
    </div>
    <div>
        <% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Baz", Bar = ViewData["baz"]}); %>
    </div>
    <input type="submit" value="Submit" />
 </form>

hth

0voto

mikerennick Punkte 285

Ich würde eine Zeichenfolge ("baz" oder "bar", etc.) mit meinem ViewData übergeben, wenn Sie die Benutzersteuerung aufrufen. Die html.textbox erhält ihren Namen aus dem übergebenen Text und ihren Wert aus dem übergebenen Wert.

0voto

37Stars Punkte 2489

Warum nicht ein Modell für die Ansicht erstellen? Ihre Ansicht müsste dann eine stark typisierte Ansicht sein, die die Datenklasse FormView verwendet.

public class FormView
{
    string Bar {get; set;}
    string Baz {get; set;}
}

In Ihrer Ansicht können Sie dann

<form action="update">
    <div>
        <% Html.RenderPartial("BarEditor", Model.Bar); %>
    </div>
    <div>
        <% Html.RenderPartial("BarEditor", Model.Baz); %>
    </div>

    <input type="submit" value="Submit" />
</form>

Ihr Controller wird

public ActionResult Update(FormView MyForm)
{
    ... = MyForm.Bar;

    ... = MyForm.Baz;
}

-2voto

Linh Punkte 994

Sie sollten über Model Mapping in ASP.Net MVC lernen. Alles in der asp.net mvc Seite wird in ein Html-Steuerelement gerendert, daher unterscheiden Sie nicht zwischen Steuerelementen in <% Html.RenderPartial("BarEditor", ViewData["bar"]); %> und <% Html.RenderPartial("BarEditor", ViewData["baz"]); %>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X