我知道网站上可能已存在此类问题,但所提供的解决方案都没有帮助我。
我想在MVC中构建一个动态的ActionResult。我使用以下课程:
public class MyMenu
{
public string Action {get;set;}
public string Controller {get; set;}
public string Area {get;set;}
}
行动是:
public ActionResult OpenView(string btn)
{
var model=_repository.MyMenu.Get(btn);
area="new {Area=" + "\"" + model.Area + "\"}";
return RedirectToAction(model.Action, model.Controller,area);
}
为了让我的行动正常运作,该区域必须完全像:
area= new {Area="Home"}
模型返回如下区域: model.Area = Home
请你帮我解决一下吗?
修改
我需要提供更多信息:
您建议使用此功能:
var area = string.Format(" new {{Area = \" {0} \"}}",model.Area);
无效,因为这一行:
返回RedirectToAction(model.Action,model.Controller,area);
看到像{Area = \" Home \"}这样的区域,由于这个原因我找不到页面(错误404)。
如果我将区域写入Debug,是的,我收到了我期望的内容,但是我的行动不起作用。
你还有其他想法吗?
编辑2:
我的问题与构建字符串无关(我期待)。基于我所做的所有试验,我得出的结论是我需要使用If / elseIf语句或开关来提供该区域。
我确信必须以某种方式连接动作内部的字符串和引号,当我发现它时,我会在这里发布它。
**Edit 3:**
我找到了问题的答案,即:
return RedirectToAction(model.Action, model.Controller, new RouteValueDictionary(new { Area = model.Area }));
我现在意识到,我的问题不正确,我的案例中的一个好问题可能是:如何像RootValue一样传递区域!!!。 我不知道我是否可以改变这个问题,或者......
答案 0 :(得分:3)
要在使用string.Format
时逃避括号,您需要使用{{
和}}
。
area = String.Format("new {{ Area = \"{0}\" }}", model.Area);
String.Format("new {{ Area = \"{0}\" }}", "Home");
的结果是new { Area = "Home" }
修改强>
请尝试以下代码:
return RedirectToAction(model.Action, model.Controller, new { Area = model.Area });