Html.Editor Для встановлення значення за замовчуванням


78

Запитання новачка. У мене є параметр, який передається до подання створення. Мені потрібно встановити назву поля зі значенням за замовчуванням. @ Html.EditorFor (model => model.Id) Мені потрібно встановити це поле вводу з іменем Id зі значенням за замовчуванням, яке передається до подання за посиланням дії.

Отже, як це поле введення - @ Html.EditorFor (model => model.Id) - отримати набір зі значенням за замовчуванням.

Чи буде працювати наступне ?? Де число 5 є параметром, який я передаю в текстове поле для встановлення значення за замовчуванням.

@Html.EditorFor(c => c.PropertyName, new { text = "5"; })

Відповіді:


66

Чистий спосіб зробити це - передати новий екземпляр створеної сутності через контролер:

//GET
public ActionResult CreateNewMyEntity(string default_value)
{
    MyEntity newMyEntity = new MyEntity();
    newMyEntity._propertyValue = default_value;

    return View(newMyEntity);
}

Якщо ви хочете передати значення за замовчуванням через ActionLink

@Html.ActionLink("Create New", "CreateNewMyEntity", new { default_value = "5" })

Це рішення, яке я в підсумку використав. Антон Семенов правильний: ідеологія MVC вимагає, щоб розробник встановлював значення за замовчуванням у контролері, а не у поданні.
Джейк

101

Ось що я знайшов:

@Html.TextBoxFor(c => c.Propertyname, new { @Value = "5" })

працює з великою літерою V, а НЕ рядкової у (припущення є значенням є ключовим словом , використовуваним в сеттерів зазвичай) Lower проти верхнього значення

@Html.EditorFor(c => c.Propertyname, new { @Value = "5" })

не працює

Ваш код все-таки виглядає так

<input Value="5" id="Propertyname" name="Propertyname" type="text" value="" />

Вартість проти вартості. Не впевнений, що я би надто захоплювався цим.

Чому б просто не перевірити в дії контролера, чи має властивість значення чи ні, і якщо він не просто встановлює його там, у вашій моделі подання, на ваше значення за замовчуванням, і не дає йому зв'язуватися, щоб уникнути всієї цієї роботи мавпи у поданні?


4
НІКОЛИ не встановлюйте атрибут value під час використання HtmlHelperметодів. Ви встановлюєте значення властивості в методі GET, перш ніж передати модель у подання.

а чому це?
Бакстін

17

Неправильно встановлювати значення за замовчуванням у режимі перегляду. Вигляд повинен виконувати роботу з відображенням, не більше. Ця дія порушує ідеологію шаблону MVC. Тож правильне місце для встановлення за замовчуванням - створити метод класу контролера.


Я хочу змінити формат значення дати та часу (дд / мм / рррр мм: ЧЧ: сс) на (рррр / ММ / дд)
Алан Болл,

15

Кращий варіант - зробити це на зразок вашої моделі перегляду

public class MyVM
{
   int _propertyValue = 5;//set Default Value here
   public int PropertyName{
       get
       {
          return _propertyValue;   
       }
       set
       {
           _propertyValue = value;
       }
   }
}

Тоді на ваш погляд

@Html.EditorFor(c => c.PropertyName)

буде працювати так, як ти хочеш (якщо значення за замовчуванням не буде)


Чому я жорстко кодую значення властивості у віртуальній машині? Для мене це не має сенсу, але, можливо, я намагаюся зробити щось інше? Я намагаюся передати параметр рядка запиту, id, до подання Create і заповнити помічник EditorFor цим значенням id, тому він збереже ідентифікатор FK у базі даних. Як це зробити?
Кетрін

4

Я щойно зробив це (перша відповідь Шаді), і це справляє задоволення:

    public ActionResult Create()
    {
        Article article = new Article();
        article.Active = true;
        article.DatePublished = DateTime.Now;
        ViewData.Model = article;
        return View();
    } 

Я міг би встановити значення за замовчуванням у своїй моделі, як власник наркоману MVC: (я використовую Entity Framework)

    public partial class Article
    {
        public Article()
        {
            Active = true;
            DatePublished = Datetime.Now;
        }
    }

    public ActionResult Create()
    {
        Article article = new Article();
        ViewData.Model = article;
        return View();
    } 

Хтось може побачити будь-які мінуси цього?


1
Це фіксовані значення за замовчуванням, якщо ви хочете забезпечити його протягом часу роботи, вам потрібен інший підхід.
Шаді

1
Дякую @Shadi, технічно Datetime. Зараз це не фіксоване значення. Якби значення за замовчуванням було згенеровано під час виконання, чи відповідальність за моделі чи контролер?
Smithy

3
Просто посилаючись на правила MVC (ви можете їх порушити!) Модель призначена лише для зберігання даних, перегляду для їх перегляду, і ваш бізнес повинен бути розміщений у контролері або класах, до яких отримує доступ контролер. Коротка відповідь, це відповідальність контролера.
Шаді,

3

Чи не @Html.EditorFor()слід використовувати атрибути, які ви вкладаєте у свою модель?

[DefaultValue(false)]
public bool TestAccount { get; set; }


2

Це спрацювало для мене

У Controlle

 ViewBag.AAA = default_Value ;

На вигляд

@Html.EditorFor(model => model.AAA, new { htmlAttributes = new { @Value = ViewBag.AAA } }

1

Це спрацювало для мене:

У контролері

*ViewBag.DefaultValue= "Default Value";*

На вигляд

*@Html.EditorFor(model => model.PropertyName, new { htmlAttributes = new { @class = "form-control", @placeholder = "Enter a Value", @Value = ViewBag.DefaultValue} })*

1

Для мене мені потрібно встановити поточну дату та час як значення за замовчуванням, це вирішило мою проблему в Перегляд, додайте цей код:

<div class="form-group">
        @Html.LabelFor(model => model.order_date, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.order_date, new { htmlAttributes = new { @class = "form-control",@Value= DateTime.Now }  })
                @Html.ValidationMessageFor(model => model.order_date, "", new { @class = "text-danger" })
                
            </div>
        </div>

Я думаю, що відповідь тут не використовується DateTime.Now, а скоріше використання атрибута @value для встановлення значення елемента Html.
Kristianne Nerona

0

У методі конструктора вашого класу моделі встановіть значення за замовчуванням, що завгодно. Тоді у вашій першій дії створіть екземпляр моделі та передайте її своєму перегляду.

    public ActionResult VolunteersAdd()
    {
        VolunteerModel model = new VolunteerModel(); //to set the default values
        return View(model);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult VolunteersAdd(VolunteerModel model)
    {


        return View(model);
    }

0

Це мій робочий код:

@Html.EditorFor(model => model.PropertyName, new { htmlAttributes = new { @class = "form-control", @Value = "123" } })

моя різниця з іншими відповідями полягає у використанні Value в масиві htmlAttributes

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.