/ / ASP.NET MVC obsługa formularzy nieznana liczba danych wejściowych - asp.net-mvc, formularze, viewmodel

Obsługa formularzy ASP.NET MVC nieznana liczba wejść - asp.net-mvc, formularze, viewmodel

Buduję wewnętrzną stronę, która pozwala zaufanymużytkownicy mogą ręcznie zmienić ustawienia parametrów za pomocą formularza. Dane wejściowe do tej konfiguracji to lista parametrów konfiguracji (o nieznanym rozmiarze), każda z określoną listą wartości. Użytkownik może następnie wybrać wartość dla wszystkich lub podzbioru parametrów.

Próbowałem to zilustrować za pomocą mojego obecnego modelu widoku

    public class SetupModel
{
public List<SetupParameter> Parameters { get; set; }
}

public class SetupParameter
{
public string ParameterName { get; set; }

// list with text=paramvalue, value=paramvalueid
public SelectList ParameterValueList { get; set; }
// id of the selected parametervalue if any
public int? SelectedParameterValueID { get; set; }
}

Moja obecna próba renderowania widoku w tym celu:

<% using (Html.BeginForm("Update", "Parameters") {%>
...
<% foreach( var parameter in Model.Parameters ) { %>
<div><%: parameter.ParameterName %></div>
<div><%: Html.DropDownListFor(x => parameter.SelectedParameterValueID, parameter.ParameterValueList, "Please select") %></div>

<% } %>
...

Moje pytanie brzmi: jak mogę to renderować?pozwala mi przesłać formularz i uzyskać zrozumiały model z powrotem do mojej akcji formularza, która pozwoli mi uzyskać listę wybranych wartości parametrów. Nie znam tutaj najlepszych praktyk ani sztuczek, więc docenię wszelkie opinie, które otrzymam :)

Odpowiedzi:

4 dla odpowiedzi № 1

Możesz spróbować użyć FormCollection:

public ActionResult Submit(FormCollection formCollection)
{
//Iterate form collection to get fields

return View();
}

0 dla odpowiedzi nr 2

Przydatny może być ten post autorstwa Phila Haacka: Wiązanie modelu z listą.

Pamiętaj też, że musisz przesłać z powrotem identyfikator (ParameterName, na przykład) dla każdego parametru, aby można było określić, która wartość odpowiada parametrowi w kontrolerze.