2011-03-09 13 views

Respuesta

18

En ASP.NET MVC, no se utiliza de <asp:... etiquetas, pero se puede tratar de fijar cualquier número de entradas dentro de un formulario a una acción de controlador donde una clase CustomViewModel podría vincularse a los datos y permitirle manipularlo aún más.

public class CustomViewModel 
{ 
    public string textbox1 { get; set; } 
    public int textbox2 { get; set; } 
    public string hidden1 { get; set; } 
} 

Por ejemplo, si estuviera usando la sintaxis Razor en MVC 3, la vista podría parecer:

@using (Html.BeginForm()) 
{ 
    Name: 
    <input type="text" name="textbox1" /> 
    Age: 
    <input type="text" name="textbox2" /> 
    <input type="hidden" name="hidden1" value="hidden text" /> 
    <input type="submit" value="Submit" /> 
} 

Luego, en su acción de controlador que automagicamente une estos datos a su clase de modelo de vista, digamos se llama Guardar, podría verse así:

[HttpPost] 
public ActionResult Save(CustomViewModel vm) 
{ 
    string name = vm.textbox1; 
    int age = vm.textbox2; 
    string hiddenText = vm.hidden1; 
    // do something useful with this data 
    return View("ModelSaved"); 
} 
+2

El uso del modelo de vista debe ser alentado en lugar del FormCollection por lo que entiendo. –

+0

@havok: respuesta modificada para reforzar el modelo de vista –

+0

Ahora esta es una gran respuesta +1 –

4

En ASP.NET MVC controles del lado del servidor como asp:Label nunca deben utilizarse porque se basan en ViewState y PostBack, que son nociones que ya no existen en ASP.NET MVC. De modo que podría usar ayudantes de HTML para generar campos de entrada. Por ejemplo:

<% using (Html.BeginForm()) { %> 
    <%= Html.LabelFor(x => x.Foo) 
    <%= Html.HiddenFor(x => x.Foo) 
    <input type="submit" value="OK" /> 
<% } %> 

y tienen una acción de controlador que recibiría el mensaje:

[HttpPost] 
public ActionResult Index(SomeViewModel model) 
{ 
    // model.Foo will contain the hidden field value here 
    ... 
} 
Cuestiones relacionadas