предварительно заполнить Html.TextBoxFor в asp.net MVC 3 - PullRequest
6 голосов
/ 07 сентября 2011

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

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

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

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

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

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

Ответы [ 2 ]

14 голосов
/ 07 сентября 2011

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

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

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, но, похоже, это работает достаточно хорошо.Надеюсь, это поможет!

3 голосов
/ 07 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...