Pregunta

Hola, soy nuevo en MVC y he buscado sin suerte cómo construir controles de usuario de MVC que tengan ViewData devuelto. Esperaba que alguien publicara una solución paso a paso sobre cómo abordar este problema. Si pudiera hacer que su solución sea muy detallada, eso sería de gran ayuda.

Perdón por ser tan discreto con mi pregunta, me gustaría aclarar que lo que estoy tratando de hacer es pasar una identificación a un método de resultado de la acción del controlador y querer entregarlo a un control de usuario directamente desde el controlador mismo. No estoy seguro de cómo comenzar con este enfoque y me pregunto si esto es posible. Básicamente, en mi mente se verá así

public ActionResult RTest(int id){
RTestDataContext db = new RTestDataContext();
var table = db.GetTable<tRTest>();
var record = table.SingleOrDefault(m=> m.id = id);

return View("RTest", record);
}

y en mi Control de usuario me gustaría representar los objetos de ese registro y ese es mi problema.

¿Fue útil?

Solución

Si entiendo su pregunta, está intentando pasar ViewData al control del usuario. Un control de usuario es esencialmente una vista parcial, por lo que debería hacer esto:

<% Html.RenderPartial("someUserControl.ascx", viewData); %>

Ahora en su control de usuario, ViewData será lo que haya pasado ...

Otros consejos

OK aquí va - Usamos datos de Json

En la página aspx tenemos una llamada ajax que llama al controlador. Busque los parámetros de opción disponibles para llamadas ajax.

url: Esto llama a la función en la clase. (obviamente) Nuestro nombre de clase es JobController, el nombre de la función es updateJob y no requiere parámetros. La url quita la controllerPortion del nombre de la clase. Por ejemplo, para llamar a la función updateJob, la url sería '/ Job / UpdateJob /'.

var data = {x:1, y:2};
$.ajax({
data: data,
cache: false,
url: '/ClassName/functionName/parameter',
dataType: "json",
type: "post",
success: function(result) {
//do something
},
error: function(errorData) {
alert(errorData.responseText);
}
}
);

En la clase JobController:

public ActionResult UpdateJob(string id)
{
   string x_Value_from_ajax = Request.Form["x"];
   string y_Value_from_ajax = Request.Form["y"];
   return Json(dataContextClass.UpdateJob(x_Value_from_ajax, y_Value_from_ajax));
}

Tenemos una página Global.asax.cs que mapea las llamadas ajax.

public class GlobalApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default",                 // Route name
    "{controller}/{action}/{id}",     // URL with parameters
        new { controller = "EnterTime", action = "Index", id = "" }  // Parameter defaults  (EnterTime is our default controller class, index is our default function and it takes no parameters.)
    );
  }
}

Espero que esto te lleve a un buen comienzo. Buena suerte

Estoy bastante seguro de que se puede acceder a los datos de la vista dentro de los controles del usuario siempre que extienda System.Web.Mvc.ViewUserControl y lo pase. Tengo un fragmento de código:

<%Html.RenderPartial("~/UserControls/CategoryChooser.ascx", ViewData);%>

y desde mi CategoryChooser ViewData es accesible.

No estoy seguro si entiendo su problema por completo, pero aquí está mi respuesta a "Cómo agregar un control de usuario a su proyecto ASP.NET MVC".

En Visual Studio 2008, puede elegir Agregar elemento. En las categorías del lado izquierdo, puede elegir Visual C # > Web > MVC. Hay una opción MVC Ver Control de usuario. Selecciónelo, elija un nombre, seleccione la página maestra deseada y listo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top