在ASP.NET MVC中,如何在提交表单时获取控件的错位名称?

时间:2008-11-30 21:55:34

标签: asp.net-mvc

我在<asp:Content>块中有一个表单正在提交给控制器。对于其中一个控件,我需要直接从中获取一些信息,这些信息不会通过调用UpdateModel()自动生成。

但是,在Request.Form字典中,控件的id是错位形式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);

尝试在FCKeditorV2标记的.aspx文件中执行此操作不起作用。 (或许我也错过了一些东西)

好的,关键是要使用编辑器的JavaScript版本而不是包装控件。还有一个方便的评论,我将在这里包括以接受已接受的答案:

  

你应该使用javascript版本   FCKEditor控件而不是.NET   自定义控件作为.NET自定义   控件是建立在WebForms上的   范例。 JS版应该有一个   隐藏字段为Html的值   你可以访问你的   控制器使用Request [“FieldName”]

5 个答案:

答案 0 :(得分:6)

FCKEditor是一个标准的javascript库,它也包含在Webforms的ASP.NET控件中。因此,在没有ASP.NET控件的情况下使用FCKEditor javascript会更容易。以这种方式集成到MVC会更容易。

如果必须使用ASP.NET控件版本,那么您将遇到这些问题。但是一种解决方案是将FCKeditor置于标准的webforms页面上,然后在使用Greybox之类的对话框中显示它。

答案 1 :(得分:0)

因为名称修改取决于控件的使用方式,我认为你必须搜索它。确保它具有唯一的名称,然后遍历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
}

答案 2 :(得分:-1)

您使用的是WebForm控件吗?据我所知,默认的ASP.NET MVC视图引擎不会破坏控件ID。

答案 3 :(得分:-1)

传统ASP.NET:runat =“server” 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

答案 4 :(得分:-2)

一个选项是在提交按钮后面写一些javascript,将表单post变量设置为你想要的。您可以使用在更改AuthorBio时更新的隐藏字段,也可以在提交时以编程方式设置它。