이것은 컨트롤러 클래스입니다. 메소드 서명 만 보여주고 있습니다.Url.Action이 매개 변수 URL 대신 쿼리를 생성합니다.
[Authorize]
[RoutePrefix("specification")]
[Route("{action=index}")]
public class SpecificationController : BaseController
{
[HttpGet]
[Route("~/specifications/{subcategoryID?}")]
public ActionResult Index(int? subcategoryID);
[HttpPost]
[Route("get/{subcategoryID?}")]
public JsonResult Get(int? subcategoryID);
[HttpGet]
[Route("~/specifications/reorder/{subcategoryID}")]
public ActionResult Reorder(int subcategoryID);
[HttpGet]
[Route("new/{id?}")]
public ActionResult New(int? id);
[HttpGet]
[Route("edit/{id?}")]
public ActionResult Edit(int id);
[HttpPost]
[ValidateAntiForgeryToken]
[Route("edit")]
public JsonResult Edit(SpecificationJson specification);
[HttpPost]
[Route("moveup")]
public JsonResult MoveUp(int specificationID);
[HttpPost]
[Route("movedown")]
public JsonResult MoveDown(int specificationID);
[HttpDelete]
[Route]
public ActionResult Delete(int id);
}
문제는 그 호출
@Url.Action("index", "specifications", new RouteValueDictionary() { { "subcategoryID", @subcategory.SubcategoryID } })
반환
/사양? subcategoryID = 15
대신
/사양/15
왜 이런 일이 무엇입니까? 나는이 경로에서 비슷한 방법을 기대하지 않는다!
당신이 말했듯이 내가 그렇게하면 그것이 효과가 있다는 것을 압니다. 그것은 이전과 같았습니다. 좀 더 일관성을 유지하기 위해 필자는 모든 결과가 표시된 뷰를 반환 할 때 나중에/specification이 아닌/spec을 지정해야한다고 결정 했으므로 이후의 설명은 단지 하나의 사양에 불과하다는 것을 의미합니다. 더 나아가, 나는 ~/specifications를 라우팅 속성에 사용함으로써 내가 라우트를 다시 시작하고 컨트롤러에 지정된 라우트 접두어를 사용하지 않는다는 것을 분명히했다. – Rob
예, 작동하려면 작동 방식을 'SpecificationsController' 컨트롤러로 옮겨야합니다. 올바르게 지정하지 않으면 경로 미스가 발생하여 다른 경로와 일치하므로 검색어 문자열이 표시됩니다. – NightOwl888
이것은 매력처럼 작동했습니다. 나는 경로를 다시 작성하는 것이 완전히 다시 작성 될 것이라고 생각했다. 당신 말이 맞아 보이는군요! – Rob