1

我的视图中有这段代码

@using (Html.BeginForm("Add", "AdminUsers"))
{
<div class="control-group">
    <span class="control-label">* Role:</span>
    <div class="controls">
        <select name="Role">
            <option value="@Argussite.SupplierService.Core.Domain.Role.Manager" 
                @if (Model.Role == Argussite.SupplierService.Core.Domain.Role.Manager) { <text>selected="selected"</text> }>
                @Argussite.SupplierService.Core.Domain.Role.ManagerTitle</option>
            <option value="@Argussite.SupplierService.Core.Domain.Role.ChiefManager"
                @if (Model.Role == Argussite.SupplierService.Core.Domain.Role.ChiefManager) { <text>selected="selected"</text> }>
                @Argussite.SupplierService.Core.Domain.Role.ChiefManagerTitle</option>
            <option value="@Argussite.SupplierService.Core.Domain.Role.Ceo"
                @if (Model.Role == Argussite.SupplierService.Core.Domain.Role.Ceo) { <text>selected="selected"</text> }>
                @Argussite.SupplierService.Core.Domain.Role.CeoTitle</option>
        </select>
    </div>
</div>

//...

<div class="control-group">
    <span class="control-label">* Phone:</span>
    <div class="controls">
        @Html.TextBoxFor(m => m.PhoneNumber)
        @Html.ValidationMessageFor(m => m.PhoneNumber, null, new {@class="text-error"})
    </div>
</div>

<div class="control-group">
    <div class="controls">
        <button type="submit" class="btn btn-primary">Add</button>
        <a href="@Url.Action("Index", "AdminUsers")" class="btn">Cancel</a>
    </div>
</div>
}

如果我在列表中选择,我需要添加一个检查

Model.Role == Argussite.SupplierService.Core.Domain.Role.Manager

我需要展示

<div class="control-group">
    <span class="control-label">* Phone:</span>
    <div class="controls">
        @Html.TextBoxFor(m => m.PhoneNumber)
        @Html.ValidationMessageFor(m => m.PhoneNumber, null, new {@class="text-error"})
    </div>
</div>  

如果我更改了列表中的选定值

Model.Role == Argussite.SupplierService.Core.Domain.Role.ChiefManager

或者

Model.Role == Argussite.SupplierService.Core.Domain.Role.Ceo

我需要显示没有 * 的电话字段,并且我不需要验证此字段。
我怎样才能做到这一点?
这是我的控制

 [HttpPost]
    public ActionResult Add(AddArgussoftUserInput input)
    {
        if ((input.Role == Role.Manager || input.Role == Role.ChiefManager) && string.IsNullOrWhiteSpace(input.PhoneNumber))
        {
            ModelState.AddModelError("PhoneNumber", "Please, provide a valid Phone Number");
        }
        if (!Context.IsUserNameUnique(input.Name))
        {
            ModelState.AddModelError("Name", AddArgussoftUserInput.NameIsNotUniqueError);
        }
        if (!Context.IsUserEmailUnique(input.Email))
        {
            ModelState.AddModelError("Email", AddArgussoftUserInput.EmailIsNotUniqueError);
        }

        if (!ModelState.IsValid)
        {
            return View(input);
        }

        var user = new User(input.Name, input.Email, input.FullName, input.Role, input.PhoneNumber);
        Context.Users.Add(user);

        Register(new UserCreatedNotification(user, null /* supplier */, UrlBuilder));
        TriggerPopupSuccess(string.Format("Account '{0}' for user {1} has been created.", input.Name, input.FullName));

        return RedirectToAction("Index");
    }
4

2 回答 2

1

您可以创建一个扩展 MvcHtml 的 HtmlHelper。我已经像这样处理了这个问题,但是使用了自定义授权属性。

namespace System.Web.Mvc.Html
{
public static class HtmlHelperExtensions
{
    public static MvcHtmlString AuthorizeCeo()
    {
        return Model.Role == "Ceo" ? value : MvcHtmlString.Empty;
    }
}

这样你就可以像这样使用它:

@Html.ActionLink("Phonenumber *", "actionName", "controllerName").AuthorizeCeo()

它只会显示用户是否被授权。

于 2013-06-26T14:08:51.087 回答
1

您可以使用 jQuery 来挂钩选择列表的更改事件,并根据所选角色显示一个 div。

我设置了一个快速的 jsFiddle 在这里向您展示 http://jsfiddle.net/nwdev/X5Zva/

<select id="RoleList">
    <option value="Manager">Manager</option>
    <option value="CEO">CEO</option>
</select>

<div id="RequiredPhone">
    phone field with validation
</div>
<div id="OptionalPhone">
    optional phone field here
</div>

还有一些 jQuery 让它连接起来......

jQuery(function() {
jQuery('#RequiredPhone').hide();
jQuery('#OptionalPhone').hide();
});

function updateOption() {
    jQuery('#RequiredPhone').toggle(this.value == 'Manager');
    jQuery('#OptionalPhone').toggle(this.value == 'CEO');
}

jQuery(document).ready(function() {
    jQuery("#RoleList").each(updateOption);
    jQuery("#RoleList").change(updateOption);
});

因此,如果您从 dropdrop 中选择 Manager,它将显示 ReqiredPhone div,如果您选择 CEO,它将显示 OptionalPhone div。

这应该让你朝着正确的方向前进。

我还没有使用验证字段对此进行测试。您可能必须动态添加它。

于 2013-06-26T14:51:39.240 回答