MVC-3 и Dynamic - @ Html.Label (View.X) не отображается - PullRequest
2 голосов
/ 03 марта 2011

Использование MVC-3, Razor:

- MyController -

public ActionResult Index(String message) // where message = "hello"
{
      ViewModel.Test1 = "This is a test";
      ViewModel.Test2 = "This is another test. " + message;
}

- Index.cshtml -

@Html.Label((string)View.Test1)
<br />
@Html.Label((string)View.Test2)

Почему он будет выдавать только следующее?

<label for="This is a test">This is a test</label>
<br />

Это сводило меня с ума в последние несколько дней и, похоже, не имеет смысла. Для этого должна быть причина.

Я могу отладить это и пройтись по представлению w. В представлении я наблюдаю, как обрабатывается эта строка, и значением View.Test2 является «Это еще один тест. Привет».

У меня есть случаи, когда я делаю следующее, и это прекрасно работает.
(Ех)

ViewModel.Something = this.readDataService.GetSomething();

Какая разница?

Спасибо

Rob

1 Ответ

4 голосов
/ 03 марта 2011

Похоже, вы используете версию ASP.NET MVC 3, предшествующую RC2. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ViewModel * * * * * * * * * * * * * * * *1001* в RC 2; *

В предыдущих версиях ASP.NET MVC 3 мы представили этот API-интерфейс, используя динамическое свойство ViewModel в базовом классе Controller, а также динамическое свойство View в шаблонах представления. Многие люди находят тот факт, что есть два разных имени, сбивают с толку, и некоторые также говорят, что использование имени ViewModel сбивает с толку в этом контексте - так как часто вы создаете строго типизированные классы ViewModel в ASP.NET MVC, и они не используют это API.

В RC2 мы выставляем динамическое свойство с одинаковым именем - ViewBag - как в контроллерах, так и в представлениях.

И похоже, вы пытаетесь использовать ViewModel в качестве строго типизированной модели для вашего представления. Вместо этого создайте класс для использования в качестве модели, а затем используйте @Html.LabelFor:

public class PersonModel
{
    public string Name { get; set; }
}

в контроллере:

PersonModel model = new PersonModel { Name = "John" };
return View(model);

в представлении:

@Html.LabelFor(model => model.Name): @Html.TextBoxFor(model => model.Name)

, что делает:

<label for="Name">Name</label>: <input id="Name" name="Name" type="text" value="John" />

НТН

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