Предварительно заполнить Html.TextBoxFor в asp.net MVC 3

Я новичок в этом, поэтому извиняюсь, если это не достаточно объяснительно. Я хочу предварительно заполнить поле в форме в asp.net mvc 3. Это работает;

@Html.TextBox("CompName", null, new { @value = ViewBag.CompName })

Но когда я хочу предварительно заполнить его значением и отправить это значение моей модели, вот так;

 @Html.TextBoxFor(model => model.Comps.CompName, null, new { @value = ViewBag.CompName })

Это не сработает. Есть идеи?

Заранее спасибо!

2 ответа

Решение

Итак, я бы предложил перейти к использованию Viewmodels, а не ViewBag. Я создал папку в своем проекте под названием ViewModels, а затем под ней создаю несколько подпапок, где я размещаю свои различные модели представления.

Если вы создаете класс viewmodel следующим образом:

public class MyViewModel
{
   public string CompName { get; set; }
}

затем в действии вашего контроллера вы можете создать один из них и заполнить его, возможно, из какой-либо существующей модели, извлеченной из базы данных. Установив, что CompName свойство в viewmodel, это будет иметь это значение в вашем представлении. И тогда ваш взгляд может выглядеть примерно так:

@model MyNamespace.ViewModels.MyViewModel

@Html.EditorFor(model => model.CompName)

или же @Html.TextBoxFor будет работать тоже.

Затем вернитесь к действию контроллера на пост, у вас будет что-то вроде этого:

[HttpPost]
public ActionResult MyAction(MyViewModel viewModel)
{
   ...
   // do whatever you want with viewModel.CompName here, like persist it back
   // to the DB
   ...
}

Возможно, вы используете что-то вроде autopper для отображения ваших моделей и моделей представления, но вы, безусловно, можете сделать это и вручную, хотя вся левая / правая вещь становится довольно утомительной.

Делает вещи намного проще, если вы делаете это таким образом и совсем не много работы.


Обновить

Но, если вы действительно хотите передать это значение в ViewBag, вы можете сделать это:

В вашем контроллере действие:

ViewBag.CompName = "Some Name";

Тогда по вашему мнению:

@Html.TextBoxFor(model =>model.Comps.CompName, new {@Value = ViewBag.CompName})

И это будет предварительно заполнить текстовое поле "Some Name".

Я бы по-прежнему придерживался подхода ViewModel, но, похоже, это работает достаточно хорошо. Надеюсь, это поможет!

От вашего контроллера, если вы передадите модель, инициализированную со значениями по умолчанию, используя один из View(...) Метод перегрузки, который принимает объект модели, эти значения будут использоваться представлением при визуализации. Вам не нужно будет использовать @value = ... синтаксис.

Другие вопросы по тегам