我的视图中有此代码
@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");
}
答案 0 :(得分:1)
你可以创建一个扩展MvcHtml的HtmlHelper。 我有点像这样处理这个问题,但使用自定义authorizeattributes。
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()
它只会显示用户是否获得授权。
答案 1 :(得分: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。
这应该让你朝着正确的方向前进。
我没有使用验证字段对此进行测试。您可能需要动态添加它。