В ASP.NET MVC как получить искаженное имя элемента управления при отправке формы? - PullRequest
2 голосов
/ 01 декабря 2008

У меня есть форма внутри блока <asp:Content>, который передается в контроллер. Для одного из элементов управления мне нужно получить некоторую информацию напрямую, что не произойдет автоматически, позвонив по номеру UpdateModel().

Однако в словаре Request.Form идентификатор элемента управления имеет искаженную форму ctl00$ContentPlaceHolder${name}. Учитывая, что я нахожусь в контроллере и ничего не знаю о представлении на данный момент, каков правильный способ доступа к данным элемента управления?

Вот как выглядит представление (.aspx) (удален посторонний код):

<%@ Register Assembly="FredCK.FCKeditorV2" Namespace="FredCK.FCKeditorV2" TagPrefix="FCKeditorV2" %>

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Admin.Master" AutoEventWireup="true"
    CodeBehind="...." Inherits="...." %>

<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder" runat="server">

    <form id="form1" action="..." method="post">

            <FCKeditorV2:FCKeditor ID="AuthorBio" runat="server" Height="250"/>
            <input type="submit" value="Save" />
    </form>

</asp:Content>

Элемент управления с именем AuthorBio отображается в контроллере в словаре Form.Request как ctl00$ContentPlaceHolder$AuthorBio$

Причина, по которой я пытаюсь использовать сторонний элемент управления с "runat-server", заключается в том, что мне нужно установить значение редактора следующим образом:

AuthorBio.Value = HttpUtility.HtmlDecode(ViewData.Model.Bio);

Попытка сделать это в файле .aspx в теге FCKeditorV2 не работает. (А может я и там что-то упускаю)

Хорошо, поэтому ключ в том, чтобы использовать версию редактора JavaScript, а не обернутый элемент управления. Был также удобный комментарий, который я собираюсь включить сюда, чтобы сопровождать принятый ответ:

вы должны использовать версию JavaScript управления FCKEditor не .NET Пользовательский элемент управления как. NET Custom контроль был построен на веб-формах парадигма. Версия JS должна иметь скрытое поле для значения HTML который вы можете получить доступ в вашем контроллер, использующий запрос ["FieldName"]

Ответы [ 5 ]

6 голосов
/ 01 декабря 2008

FCKEditor - это стандартная библиотека javascript, которая также входит в элемент управления ASP.NET для веб-форм. Так что было бы проще использовать JavaScript FCKEditor без элемента управления ASP.NET. Так будет проще интегрироваться в MVC.

Если вам необходимо использовать контрольную версию ASP.NET, у вас возникнут такие проблемы. Но одно из решений - разместить FCKeditor на стандартной странице веб-форм, а затем показать это в диалоговом окне, используя что-то вроде Greybox.

0 голосов
/ 01 декабря 2008

Поскольку искажение имени зависит от того, как используется элемент управления, я думаю, вам придется его искать. Убедитесь, что оно имеет уникальное имя, затем выполните итерацию по Request.Form (или FormCollection, если используете его в качестве параметра) и найдите ключ, который заканчивается на «$ ControlName». Когда вы найдете это имя, используйте этот ключ, чтобы получить значение.

string editorKey = null;
foreach (string key in Request.Form.Keys)
{
    if (key.EndsWith( "$AuthorBio" ))
    {
       editorKey = key;
       break;
    }
}

if (!string.IsNullOrEmpty( editorKey ))
{
    ... process
}
0 голосов
/ 01 декабря 2008

Один из вариантов - написать какой-нибудь javascript за кнопкой отправки, который установит для переменной формы сообщения значение, которое вы хотите. Вы можете использовать скрытое поле, которое вы обновляете при смене вашего AuthorBio, или вы можете установить его программно при отправке.

0 голосов
/ 01 декабря 2008

Традиционный ASP.NET: runat = "сервер" ASP.NET MVC = нет элементов управления "runat = server".

Вы не используете MVC правильно. Тот факт, что вы хотите использовать элементы управления "runat = server", означает, что вы должны делать традиционное приложение ASP.NET.

Это полу-старая статья, но вы можете проверить ее, чтобы получить разницу между ASP.NET и MVC: http://www.singingeels.com/Articles/ASPNET_MVC_in_the_Real_World.aspx

0 голосов
/ 01 декабря 2008

Вы используете элемент управления WebForm? Насколько мне известно, механизм просмотра ASP.NET MVC по умолчанию не искажает идентификаторы элементов управления.

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