MVC Routing - Use rota parte para vistas de comutação
-
08-07-2019 - |
Pergunta
Eu tenho uma série de URLs que parecem
/Catalog/Ajax/Update/{ViewToUpdate}?var1=a&var2=b&var3=c
Atualmente eu tenha configurado várias rotas - uma para cada {ViewToUpdate} e que eu gostaria de fazer é passar o {ViewToUpdate} para meu manipulador de Acção para que eu possa condensar o meu código. Em vez de:
public ActionResult AjaxUpdateNavigation(string var1, string var2, string var3) {}
Eu gostaria:
public ActionResult AjaxUpdateNavigation(string ViewToUpdate, string var1, string var2, string var3) {}
Aqui estão as minhas rotas atuais:
routes.MapRoute(
"CatalogAjaxNavigation",
"Catalog/Ajax/Update/Navigation",
new { controller = "Catalog", action = "AjaxUpdateNavigation" }
);
Como faço para configurar a definição de rota corretamente para lidar com ambos os {} ViewToUpdate corda, bem como ainda passar na querystring?
TIA
Solução
Aqui está a minha rota:
routes.MapRoute("TestThing", "test/{ViewToUpdate}", new {controller = "Home", action = "TestQSParams"});
Aqui está a minha ação:
public ActionResult TestQSParams(string ViewToUpdate, string var1, string var2)
{
TestQSParamsModel m = new TestQSParamsModel {var1 = var1, var2 = var2, ViewToUpdate = ViewToUpdate};
return View("TestQSParams", m);
}
Aqui está o meu modelo:
public class TestQSParamsModel
{
public string ViewToUpdate { get; set; }
public string var1 { get; set; }
public string var2 { get; set; }
}
Aqui é o meu ponto de vista:
From QS:<br />
<% foreach(string s in Request.QueryString)
Response.Write(string.Format("{0}={1}<br />", s, Request.QueryString[s])); %>
<br />
<br />
From Model:<br />
<asp:Literal ID="modelvars" runat="server"></asp:Literal>
A visão codebehind:
protected void Page_Load(object sender, EventArgs e)
{
modelvars.Text = string.Format("{0}<br />{1}<br />{2}", Model.var1, Model.var2, Model.ViewToUpdate);
}
O meu url:
/test/ThisView?var0=douglas&var1=patrick&var2=caldwell
Finalmente, o meu resultado:
From QS:
var0=douglas
var1=patrick
var2=caldwell
From Model:
patrick
caldwell
ThisView
Outras dicas
routes.MapRoute(
"CatalogAjaxNavigation",
"Catalog/Ajax/Update/{ViewToUpdate}",
new { controller = "Catalog", action = "AjaxUpdateNavigation" , ViewToUpdate = (string)null }
);
public ActionResult AjaxUpdateNavigation(string ViewToUpdate, string var1, string var2, string var3) {}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow