我在<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”]
答案 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时更新的隐藏字段,也可以在提交时以编程方式设置它。