如何从控制器禁用按钮?

时间:2017-11-25 01:53:57

标签: c# asp.net-mvc

我需要在属性'标记'时禁用按钮。是真的。这是我的模特和控制器。

public class User {

      public string Name { get; set; }
      public bool Flag{ get; set; }

    }

控制器

public ViewResult Index() {

   var userFlag = context.Users.Where(u => u.Flag = true).FirstOrDefault();

   if (userFlag != false)
                {
                    // disable button 
                }
 else
                {
                   // enable button
                }

  return View();

}

3 个答案:

答案 0 :(得分:1)

您必须将该标志(布尔值)传递给视图,并有条件地呈现具有disabled属性的按钮

您可以通过多种方式传递布尔值。

如果您有视图模型,请设置它的相应属性。假设您有一个名为YourViewModel的视图模型用于您的视图,它具有布尔类型的IsEnabled属性,在您的操作方法中设置该属性并将视图模型发送到视图。

所以在你的行动方法中

var vm = new YourViewModel();
var user = context.Users.Where(u => u.Flag == true).FirstOrDefault();
vm.IsEnabled= user != null && user.Flag; 
// Pointless because you are getting the one with True;
// So the value will be always true if user is not null
return View(vm);

和视图,检查模型的IsEnabled属性,

@model YourViewModel
@if (Model.IsEnabled)
{
    <input type="submit" value="Save" />
}
else
{
    <input type="submit" value="Save"  disabled="disabled" />
}

如果您没有视图模型/您的视图没有强类型化到任何类,您可以将布尔值作为页面模型传递

var user = context.Users.Where(u => u.Flag = true).FirstOrDefault();
var flag= user != null && user.Flag; 
// Pointless because you are getting the one with True;
// So the value will be always true if user is not null
return View("Index",flag);

并在视图中

@model bool
@if (Model)
{
    <input type="submit" value="Save" />
}
else
{
    <input type="submit" value="Save"  disabled="disabled"/>
}

另一个选择是使用ViewBag将此布尔标志从action方法转移到view。

var user = context.Users.Where(u => u.Flag == true).FirstOrDefault();
ViewBag.IsEnabled = user != null && user.Flag;
// Pointless because you are getting the one with True;
// So the value will be always true if user is not null
return View();

并在视图中

@if (ViewBag.IsEnabled !=null && ViewBag.IsEnabled)
{
    <input type="submit" value="Save" />
}
else
{
    <input type="submit" value="Save" disabled="disabled" />
}

这里我只在记录的标记值为true时呈现启用按钮。调整代码以根据需要否定它(在您的问题中,这是另一种方式)

答案 1 :(得分:1)

您在视图中禁用该按钮,而不是在控制器中。首先,控制器需要向视图发送一些信息。理想情况下,这是一个视图模型的形式,但是现在让我们在ViewBag中添加一个简单的值。像这样:

ViewBag.UserFlag = userFlag;
return View();

然后在视图中,您可以使用该值。例如:

@if(ViewBag.UserFlag == true)
{
    <button type="button" disabled>Click here</button>
}
else
{
    <button type="button">Click here</button>
}

或者您的按钮在HTML中“启用”而非“禁用”。如果需要,您甚至可以使用三元条件运算符将其压缩为单行,这是个人偏好的问题。

但重点是控制器只是为视图提供渲染UI所需的数据。然后,视图负责响应该数据并呈现UI。

答案 2 :(得分:0)

您可以使用ViewBag将标志值从控制器传递到视图

public ViewResult Index() {    
   var userFlag = context.Users.Where(u => u.Flag = true).FirstOrDefault();
   ViewBag.UserFlag = userFlag == null ? true : false;
   return View();    
}

您可以在视图中停用按钮

 <input type="button" value="Save" @{ if (ViewBag.UserFlag == true){  @: disabled="disabled"} } />