在ASP.NET MVC中,我有一个BooksController
,它提供了查看书籍的功能。我希望www.mydomain.com/books
返回我所有图书的清单(以及相关的#34;所有图书和#34; html页面),而www.domain.com/books/c-sharp-for-dummies
则可以获取&#的所有信息34; C#for dummies"本书(再次,使用它"单书和#34; html页面)。
使用Index
参数创建bookName
方法非常简单。
public class BooksController
{
public ActionResult Index(string bookName)
{
if (string.IsNullOrEmpty(bookName)
{
//return all books here
}
else
{
//return single book here
}
}
}
Index
有相关的Index.cshtml
观看页面,但是我必须在视图中进行剃刀检查以确定是否加载"所有书籍" HTML / CSS,或者#34;单本书" HTML / CSS - 就像视图包含两个页面一样,我觉得这是违反直觉的。
对这种情况有什么好的(甚至是传统的)方法?我只创建了两个cshtml
文件,一个用于"所有书籍和#34;一个用于"单本书",并根据是否提供bookName
参数返回相应的视图?
public class BooksController
{
public ActionResult Index(string bookName)
{
if (string.IsNullOrEmpty(bookName)
{
//return all books viewmodel and related view
}
else
{
//return single book viewmodel and related view
}
}
}
答案 0 :(得分:3)
您应该在控制器中创建2个单独的操作方法。一个用于返回包含所有书籍的视图,另一个用于返回单个书籍的详细信息。
您可以通过这种方式定义路由定义,以便请求来自yourSite/books
,它将由索引操作和yourSite/books/somebookname
处理,它将由{{1}处理动作方法。以下是attribute routing的使用方法。
Details
现在,在public class BooksController : Controller
{
[Route("books")]
public ActionResult Index()
{
// to do : Get all the books and pass it to the view.
return View();
}
[Route("books/{bookName}")]
public ActionResult Details(string bookName)
{
// to do : Get single book using the bookName parameter
// and pass that to the view.
return View();
}
}
视图中,您可以显示所有图书,在index.cshtml
视图中,您可以显示特定图书的详细信息。