vistas vista update parcial pagina only mvc multiples misma actualizar asp.net-mvc asp.net-mvc-2 asp.net-mvc-3

asp.net mvc - update - cómo obtener datos de vista parcial en el controlador



refresh partial view mvc (1)

Estoy utilizando 3 vistas parciales en una vista única, tengo un botón de enviar al hacer clic en el que quiero enviar información a la base de datos, tengo que recuperar datos de toda la vista parcial. ¿Puede por favor proporcionarme la información correcta para hacerlo?

Darin estoy usando L2S así que cuando arrastro mi procedimiento almacenado, obtengo un código como este en

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="SP_Name")] public int SP_Name( [global::System.Data.Linq.Mapping.ParameterAttribute(Name="EmployeeID", DbType="Int")] System.Nullable<int> EmployeeID { IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), EmployeeID); encounterID = ((System.Nullable<int>)(result.GetParameterValue(293))); return ((int)(result.ReturnValue)); } }

Actualizado

<script language="javascript" type="text/javascript"> $(function () { $(''#Form1'').submit(function () { $.ajax({ url: this.action, type: this.method, data: $(this).serialize(), success: function (data) { var message = data.Result; $(''#Result'').html(message); } }); return false; }); }); </script>

En mi controlador estoy usando

public ActionResult Index(FormCollection frm) { My Code --------------------- return Json(new { Result = "Success" }); }

Cuando devuelvo esto estoy recuperando un archivo y me pide que lo guarde. He comprobado usando flidder, en URL me muestra que la ruta como / solo donde como si llené una vista parcial en particular Muestra algo como / nombre del controlador / vista parcial ¿Puede ayudarme con este problema?


Bueno, enviar datos a una acción del controlador generalmente se realiza al realizar una solicitud HTTP a esta acción del controlador. Hay diferentes formas de realizar una solicitud HTTP:

  1. Use una etiqueta <form> apunte a esta acción
  2. Usa AJAX

Por lo tanto, si elige el primer enfoque, podría tener un único <form> ajuste todos los parciales que tendrían múltiples botones de envío (con diferentes nombres). Luego, al hacer clic en los botones de enviar uno, todos los campos de entrada se enviarán a la acción del controlador y, luego, dentro de la acción del controlador, podría procesar los datos según el botón de envío en el que se hizo clic.

Si usa la segunda opción, entonces, simplemente coseche los valores que necesita para enviarlos, haga clic en el botón y envíelos a lo largo de la solicitud de AJAX.

ACTUALIZAR:

Como se solicitó en la sección de comentarios, aquí se explica cómo la primera técnica podría ponerse en acción. Utiliza dos parciales en lugar de tres, pero se puede extrapolar fácilmente.

Como siempre, comienza definiendo un modelo de vista que representará los datos con los que le gustaría trabajar en esta vista particular:

public class MyViewModel { public Partial1ViewModel Model1 { get; set; } public Partial2ViewModel Model2 { get; set; } } public class Partial1ViewModel { public string Foo { get; set; } } public class Partial2ViewModel { public string Bar { get; set; } }

Entonces un controlador:

public class HomeController : Controller { public ActionResult Index() { var model = new MyViewModel { Model1 = new Partial1ViewModel { Foo = "foo" }, Model2 = new Partial2ViewModel { Bar = "bar" }, }; return View(model); } [HttpPost] public ActionResult Index(MyViewModel model) { // Here you have access to model.Model1.Foo and model.Model2.Bar => var button = ""; if (!string.IsNullOrEmpty(Request["submit1"])) { // submit1 button was used button = "submit1"; } else if (!string.IsNullOrEmpty(Request["submit2"])) { // submit2 button was used button = "submit2"; } var result = string.Format("thanks for submitting using {0}", button); return Content(result, "text/plain"); } }

y luego una vista principal ( ~/Views/Home/Index.cshtml ):

@model MyViewModel @using (Html.BeginForm()) { @Html.EditorFor(x => x.Model1) @Html.EditorFor(x => x.Model2) }

y las dos plantillas de editor correspondientes (o parciales, si lo prefiere):

~/Views/Home/EditorTemplates/Partial1ViewModel.cshtml :

@model Partial1ViewModel <h2>Partial 1</h2> <div> @Html.LabelFor(x => x.Foo) @Html.EditorFor(x => x.Foo) <input type="submit" value="Submit me!" name="submit1" /> </div>

~/Views/Home/EditorTemplates/Partial2ViewModel.cshtml :

@model Partial2ViewModel <h2>Partial 2</h2> <div> @Html.LabelFor(x => x.Bar) @Html.EditorFor(x => x.Bar) <input type="submit" value="Submit me!" name="submit2" /> </div>