Html.TextBox ("Title") внутри частичного представления (.ascx) получает значение "Title" из родительского представления. - PullRequest
0 голосов
/ 01 ноября 2010

В моем проекте на форуме у меня есть частичное представление (.ascx), которое используется для добавления нового сообщения на форуме. Сообщения форума находятся в разделе Темы (Категории), и в обеих этих таблицах есть столбец с именем Title.

Теперь проблема в том, что когда я размещаю частичное представление на странице Темы, оно автоматически извлекает значение Заголовка из Темы, таким образом заполняя мое Текстовое поле Заголовка с Topic Title. Не идеально!

Код внутри CreatePost.ascx просто

<label for="Title">Title</label>
<%= Html.TextBox("Title") %>

Я пытался изменить это значение на <%= Html.TextBox("Post.Title") %>, но тогда значение Textbox не публикуется.

Это нормальное поведение, и есть ли способ, которым я могу избавиться от него, не очистив его с помощью Javascript?

Я даже пытался установить значение с помощью 2-й перегрузки Html.TextBox("Title", "some value"), но оно просто переопределяется.

Пожалуйста, помогите!

Ответы [ 3 ]

2 голосов
/ 02 ноября 2010

Если вы используете ASP.NET MVC 2, вы всегда должны использовать строго типизированные помощники, которые будут правильно обрабатывать привязку:

<%= Html.TextBoxFor(x => x.Category.Title) %>
0 голосов
/ 02 ноября 2010

Похоже, проблема в коде, который вы используете для визуализации частичного представления.RenderPartial будет проходить по умолчанию через модель из родительского представления, следовательно, поведение, которое вы видите, когда заголовок темы отображается в частичном.Вы можете переопределить это, хотя - один из параметров RenderPartial позволит вам передать новую модель.

Что-то вроде:

<% Html.RenderPartial("CreatePost.ascx", new Post());%>

для передачи в новуюмодель с частичным представлением (в данном случае пустой пост).

0 голосов
/ 01 ноября 2010

Попробуйте следующее:

CreatePost.ascx

   <label for="Title">Title</label>
   <%= Html.TextBox("Title") %>

YourController.cs

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreatePost(string Title) {
    // do something with Title
    return View();
}

Необходимо убедиться, что CreatePost.ascx отображается между

<% using (Html.BeginForm()) { %>....
  ..
  <% Html.RenderPartial("CreatePost.ascx");
  ..
  ..
<% } >

в вашем представлении.

Надеюсь, это поможет ...

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