Отключите все средства управления (текстовое поле, флажок, кнопка и т.д.) в Представлении (ASP.NET MVC)

Так что мне удалось выяснить это. SingleChildScrollView должен находиться внутри вашего отступа, который является родительским виджетом для вашего тела. Ваш Card должен быть ребенком SingleChildScrollView.

Этот код должен работать для вас.

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
    primarySwatch: Colors.blue,
  ),
  home: Scaffold(
    appBar: AppBar(
      title: Text('Company name'),
      leading: new IconButton(
        icon: new Icon(Icons.arrow_back),
        onPressed: () {
          Navigator.pop(context, true);
        }
      )
    ),
    body: Padding(
    padding: EdgeInsets.all(10),
    child: SingleChildScrollView(
      child: Card(
            child: Container(
                decoration:
                    BoxDecoration(color: Colors.white),
                child: Column(
                  children: <Widget>[
                  Container(
                      height: 120,
                      width: double.infinity,
                      decoration: BoxDecoration(color: Colors.white),
                      child: Row(
                        children: <Widget>[
                          Padding(
                              padding: EdgeInsets.fromLTRB(10, 0, 0, 0),
                              child: Container(
                                  alignment: Alignment.centerLeft,
                                  width: 100,
                                  height: 100,
                                  child: Image.network("https://via.placeholder.com/200"))),
                          Expanded(
                            child: Padding(
                                padding: EdgeInsets.fromLTRB(30, 20, 10, 0),
                                child: Column(
                                  crossAxisAlignment:
                                      CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Text('Company name',
                                        style: TextStyle(
                                            fontSize: 18,
                                            fontWeight: FontWeight.bold)),
                                    Text('Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum')
                                  ],
                                )),
                          )
                        ],
                      )),
                  Padding(
                    padding: EdgeInsets.only(left: 20, top: 20, right: 20),
                    child: Container(
                      child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: <Widget>[
                            Text('Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum ',
                                style: TextStyle(color: Colors.blue)),
                            Padding(padding: EdgeInsets.only(top: 25)),
                            Row(
                              crossAxisAlignment: CrossAxisAlignment.end,
                              children: <Widget>[
                                Icon(
                                  Icons.thumb_up,
                                  color: Colors.white,
                                ),
                                Padding(
                                    padding: EdgeInsets.only(right: 20)),
                                Text('Lorem ipsum lorem',
                                    style: TextStyle(
                                        color: Colors.red,
                                        fontWeight: FontWeight.bold,
                                        fontSize: 18))
                            ],
                          )
                        ]
                      ),
                    ),
                  ),
                ]
              )
            )
          )
        )
      )
    )
  );
}
} 

PS Я изменил некоторые цвета, чтобы увидеть отображение интерфейса на экране.

6
задан Ravi 13 May 2009 в 04:41
поделиться

3 ответа

вы можете передать флаг в представление, чтобы указать, что он должен отключить все элементы управления.

вот пример:

public ActionResult MyAction() {
 ViewData["disablecontrols"] = false;
 if (condition)
 {
    ViewData["disablecontrols"] = true;
 }
 return View();
}

В представлении (с использованием jQuery):

   <script type="text/javascript">
$(document).ready(function() {
var disabled = <%=ViewData["disablecontrols"].ToString()%>;
  if (disabled) {
    $('input,select').attr('disabled',disabled);
  }
})
    </script>
10
ответ дан 9 December 2019 в 22:39
поделиться

Это действительно зависит от того, как визуализируются ваши элементы управления. На практике мы делаем нечто подобное, за исключением того, что устанавливаем элементы управления только для чтения. Это сделано для того, чтобы мы могли повторно использовать представление (только для чтения) и редактировать представления.

Я лично рекомендую сделать это, чтобы иметь флаг только для чтения, который устанавливается в представлении с использованием значения в ViewData .

Оттуда напишите несколько вспомогательных методов, чтобы различать отключенную и неотключенную разметку. Вы можете создать эту разметку самостоятельно или обернуть существующие методы HtmlHelper, которые предоставляет ASP.NET MVC.

// In your controller
ViewData["DisableControls"] = true;

<%-- In your view --%>
<% bool disabled = ViewData["DisableControls"] as bool; %>
...
<%= Html.TextBox("fieldname", value, disabled) %>
<%= Html.CheckBox("anotherone", value, disabled) %>

// In a helper class
public static string TextBox(this HtmlHelper Html, string fieldname, object value, bool disabled)
{
    var attributes = new Dictionary<string, string>();
    if (disabled)
        attributes.Add("disabled", "disabled");
    return Html.TextBox(fieldname, value, attributes);
}

Мы делаем это, используя Page_Load (), как и в WebForms, для отключения серверных элементов управления. Мы создали несколько настраиваемых серверных элементов управления для обработки наших полей формы. Это было в младенчестве ASP.NET MVC, и я бы не рекомендовал это делать, но это альтернатива.

1
ответ дан 9 December 2019 в 22:39
поделиться

Я не думаю, что вы можете сделать это с помощью контроллера, так как представление возвращается после того, как вся другая логика сделана. Однако вы, вероятно, могли бы что-то сделать с библиотеками AJAX, включенными в ASP.NET MVC.

0
ответ дан 9 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: