asp.net mvc - net - Controles de usuario MVC+ViewData
tag helpers asp net core 2 (4)
Estoy bastante seguro de que se puede acceder a los datos de visualización dentro de los controles de usuario siempre que extienda System.Web.Mvc.ViewUserControl y lo transfiera. Tengo un fragmento de código:
<%Html.RenderPartial("~/UserControls/CategoryChooser.ascx", ViewData);%>
y desde mi CategoryChooser ViewData es accesible.
Hola, soy nuevo en MVC y he explorado sin mucha suerte cómo construir controles de usuario de MVC que tengan devuelto ViewData. Esperaba que alguien publicara una solución paso a paso sobre cómo abordar este problema. Si pudieras hacer tu solución muy detallada, 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 transferir una identificación a un método de acción de control y querer procesarlo directamente desde el controlador. No estoy seguro de cómo comenzar con este enfoque y me pregunto si esto es posible. En esencia, se parecerá a esto en mi mente
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 renderizar los objetos de ese registro y ese es mi problema.
No estoy seguro si entiendo completamente su problema, pero esta es 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 View User Control. Selecciónalo, elige un nombre, selecciona la página maestra deseada y listo.
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 opciones disponibles para las 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 elimina el controladorPortion del nombre de 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
Si entiendo su pregunta, está tratando de pasar ViewData al control del usuario. Un control de usuario es esencialmente una vista parcial, por lo que haría esto:
<% Html.RenderPartial("someUserControl.ascx", viewData); %>
Ahora en tu usercontrol, ViewData será lo que pasaste ...