Итак, я бы посоветовал перейти к использованию 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, но, похоже, это работает достаточно хорошо.Надеюсь, это поможет!