Tom*_*man 9 asp.net asp.net-mvc controller
我有以下场景:我的网站显示文章(由管理员输入,如博客).
因此,要查看文章,请将用户引用到Home/Articles/{article ID}.
但是,用户使用jsTree列表从Articles.aspx视图本身中选择要查看的文章.
所以我需要做的是能够区分两种情况:用户正在访问特定文章,或者他只是试图访问"主要"文章页面.我尝试将"Articles"控制器参数设置为可选(int?id),但后来我在控制器中"使用"id值时出现问题.
处理此方案的最佳方式是什么?也许我只需要一个更好的逻辑来检查"url"中是否提供了id参数?
我试图避免使用两个视图/控制器,只是出于代码复制的原因.
egl*_*ius 14
使用单独的操作,例如:
public ActionResult Articles() ...
public ActionResult Article(int id) ...
Run Code Online (Sandbox Code Playgroud)
或者将其移动到Articles控制器(使用默认路由的URL将是:Articles和Articles/Detail/{id}):
public class ArticlesController : Controller
{
public ActionResult Index() ...
public ActionResult Detail(int id) ...
}
Run Code Online (Sandbox Code Playgroud)
如果您仍然必须像发布的那样使用它,请尝试以下方法之一:
public ActionResult Articles(int id = 0)
{
if(id == 0) {
return View(GetArticlesSummaries());
}
return View("Article", GetArticle(id));
}
public ActionResult Articles(int? id)
{
if(id == null) {
return View(GetArticlesSummaries());
}
return View("Article", GetArticle(id.Value));
}
Run Code Online (Sandbox Code Playgroud)
首先,我同意@Steve :).但如果你真的想用
int? id
Run Code Online (Sandbox Code Playgroud)
如果使用简单设置id,您可以检查控制器方法
if(id == null)
Run Code Online (Sandbox Code Playgroud)
如果是这样,请从您的数据库(或类似的东西)加载所有文章,并将这些文章传递给您的视图(直接或使用视图模型).如果设置了id,你只需从数据库加载具有该id的文章并将其发送到视图(如果你不使用视图模型,也可以在列表中)?
在您的视图中,只需使用提供给视图的文章加载列表中的所有文章.其中包含全部或仅包含一个.
完整的虚拟代码
public ActionResult showArticles(int? id){
List<Articles> aList;
if(id == null){
aList = repository.GetAllArticles().ToList();
}else{
aList = new List<Articles>();
aList.add(repository.GetArticleByID(id));
}
return View(aList);
}
Run Code Online (Sandbox Code Playgroud)
您的视图具有以下内容:
<% Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<List<Articles>>"%>
foreach(Articles a in Model)
//display article
Run Code Online (Sandbox Code Playgroud)
然后使用以下两个选项之一调用它:
html.ActionLink("one article","showArticles","Articles",new {id = aID},null}
html.ActionLink("all articles","showArticles","Articles"}
Run Code Online (Sandbox Code Playgroud)
为您知道没有提供任何值的ID定义默认值 - 通常为0.
public ActionResult Articles([DefaultValue(0)]int Id)
{
if (Id == 0)
// show all
else
// show selected
..
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44541 次 |
| 最近记录: |