小编Cha*_*ino的帖子

路由参数,自定义模型绑定器或动作过滤器?

我们的ASP.NET MVC应用程序允许经过身份验证的用户管理链接到其帐户的一个或多个"站点".

我们的网址是高度猜测的,因为我们在网址而不是Id中使用网站友好名称,例如:

/sites/mysite/
/sites/mysite/settings

/sites/mysite/blog/posts
/sites/mysite/pages/create
Run Code Online (Sandbox Code Playgroud)

如您所见,我们需要在多个路线中访问站点名称.

我们需要为所有这些操作执行相同的行为:

  1. 当前帐户中查找具有给定标识符的站点
  2. 如果返回的站点为null,则返回404(或自定义视图)
  3. 如果站点非null(有效),我们可以继续执行该操作

我们始终可以通过ISiteContext对象使用当前帐户.以下是我如何使用普通路由参数实现上述所有操作并直接在我的操作中执行查询:

private readonly ISiteContext siteContext;
private readonly IRepository<Site> siteRepository;

public SitesController(ISiteContext siteContext, IRepository<Site> siteRepository)
{
    this.siteContext = siteContext;
    this.siteRepository = siteRepository;
}

[HttpGet]
public ActionResult Details(string id)
{
    var site =
        siteRepository.Get(
            s => s.Account == siteContext.Account && s.SystemName == id
        );

    if (site == null)
        return HttpNotFound();

    return Content("Viewing details for site " + site.Name);
}
Run Code Online (Sandbox Code Playgroud)

这不是太糟糕,但我需要在20个左右的动作方法上做这个,所以想尽可能保持干燥.

我没有做过自定义模型粘合剂,所以我想知道这是否是一个更适合他们的工作.一个关键要求是我可以将我的依赖项注入模型绑定器(对于ISiteContext和IRepository - 如果需要,我可以回退到DependencyResolver).

非常感谢,

更新 …

asp.net-mvc modelbinders action-filter asp.net-mvc-3

5
推荐指数
1
解决办法
3059
查看次数

如何使用print.css使选择看起来像普通文本

我有一个显示这个的网页:

在此输入图像描述

这背后的Html是:

<label>Approved For Payment:</label>

    <select id="Invoice_ApprovedForPayment" class="dropdownapprovedforpayment" name="Invoice.ApprovedForPayment" lineid="299" disabled="disabled">
    <option value="null" selected="selected">Please Approve</option>
    <option value="true">Accepted</option>
    <option value="false">On Hold</option>
    </select>
Run Code Online (Sandbox Code Playgroud)

目前,当打印此页面时,请批准即将显示.因为它将其打印为选择下拉列表.这是有道理的,但是我希望我可以以某种方式得到它,以便它打印时看起来像是一个正常的标签,跨度等?我在想这可能是使用print.css吗?任何人都可以告诉我如何实现这一目标吗?

html css printing asp.net-mvc

5
推荐指数
2
解决办法
6060
查看次数

虽然不是[required]列表字段按要求显示,并且模型状态由于它为空而无效?

我有以下代码 -

视图-

<% Html.BeginForm(); %>
    <div>
<%= Html.DropDownList("DropDownSelectList", new SelectList( Model.DropDownSelectList, "Value", "Text"))%>
Run Code Online (Sandbox Code Playgroud)

控制器 -

public ActionResult Admin(string apiKey, string userId)
{
    ChallengesAdminViewModel vm = new ChallengesAdminViewModel();
    vm.ApiKey = apiKey;
    vm.UserId = userId;
    vm.DropDownSelectList = new List<SelectListItem>();
    vm.DropDownSelectList.Add(listItem1);
    vm.DropDownSelectList.Add(listItem2);
    vm.DropDownSelectList.Add(listItem3);
    vm.DropDownSelectList.Add(listItem4);
    vm.DropDownSelectList.Add(listItem5);
    vm.DropDownSelectList.Add(listItem6);
    vm.DropDownSelectList.Add(listItem7);
}

[HttpPost]
public ActionResult Admin(ChallengesAdminViewModel vm)
{
    if (ModelState.IsValid)//Due to the null dropdownlist  gives model state invalid
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

ViewModel-

public class ChallengesAdminViewModel
{
    [Required]
    public string ApiKey { get; set; }

    [Required]
    public …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc field required-field

3
推荐指数
1
解决办法
3222
查看次数

使用左右箭头设置焦点(HTML + JS)

是否有任何使左箭头的行为类似于标签按钮(将焦点设置为下一个可聚焦项目),右箭头的行为类似于shift +标签(将焦点设置为上一个可对焦项目)?

我到目前为止:

$().keypress(function(e) {
    if (e.keyCode == 37) {
        alert('I want to do a shift-tab');
    }
    else if (e.keyCode == 39) {
        alert('I want to do a tab');
    }
});
Run Code Online (Sandbox Code Playgroud)

但谷歌并没有那么有用所以我认为我会在这里快速发布一些帖子,而谷歌更多.

谢谢!

哦,这纯粹是为了FF3.0所以我不需要担心其他浏览器的麻烦.

html javascript jquery focus setfocus

0
推荐指数
1
解决办法
1614
查看次数