2013-03-20 28 views
16

Rozumiem, że mogę użyć @Html.HiddenFor(m => m.parameter), a po przesłaniu formularza ten parametr zostanie przekazany do kontrolera. Mój model ma wiele właściwości.Prześlij cały model na składanie formularza

Czy istnieje krótszy sposób jednoczesnego przejścia całego modelu do kontrolera lub czy muszę go wykonywać po kolei za każdym razem?

Odpowiedz

17

Model zostanie przekazany do kontrolera w całości, ale wartości właściwości, które nie są związane wejściowymi lub ukrytymi polami, zostaną utracone.

Musisz albo powiązać właściwości w formularzu po stronie klienta, albo ponownie pobrać encję po stronie serwera.

Wygląda na to, że pytasz o coś takiego, jak @Html.HiddenFor(m => m.Model), a to nie jest możliwe. Przepraszam

Trzeba pamiętać, że jeśli masz mnóstwo ukrytych pól, możesz wysłać więcej danych do widoku, niż naprawdę potrzebujesz. Rozważ zastosowanie modeli widoku

0

Cały model zostanie opublikowany, jeśli używasz elementu FORMULARZA. Twoje elementy stosując model oczywiście muszą być wewnątrz elementu formularza

możesz również zamieścić formularz sobie powiedzieć za pomocą JQuery

Zobacz tę drugą kwestię stosu na to: jQuery AJAX submit form

mają bliskie spojrzenie na . na anwser przez "Alfrekjv"

1

ta jest już wbudowana w Rozważmy następujący model:

public class MyModel 
{ 
    public string PropertyA { get; set; } 
    public string parameter { get; set; } 
} 

i teraz współpracę nsider tego działania:

[HttpPost] 
public ActionResult PostSomeData(MyModel model) 
{ 
} 

MVC będzie wykorzystać FormCollection i wypełnić w klasie MyModel gdzie to możliwe. Jeśli nie masz w formularzu PropertyA, będzie to null. Ale ponieważ masz właściwość input dla właściwości parameter, zostanie ona wypełniona.

1

Dla każdego, kto na to patrzy, możesz zrobić @ Html.EditorForModel() w ukrytym dziale div. Trzeba również użyć @ Html.EditorFor (model => model.ObjectProperty) dla każdej właściwości obiektu modelu.

<div hidden="hidden"> 
    @Html.EditorForModel() 
    @Html.EditorFor(model => model.ObjectProperty) 
    @Html.EditorFor(model => model.ListOfObjectsProperty) 
</div> 
0

Można sprawdzić tylko właściwości chcesz:

if (this.ModelState.IsValidField("Name")) 
{ 
    // ..... 
} 

zamiast:

if (this.ModelState.IsValid) 
{ 
    // ..... 
}