2008-11-30 87 views
2

我有一個<asp:Content>塊內的表單被提交給控制器。對於其中一個控件,我需要直接從它獲取一些信息,這不會通過調用UpdateModel()自動發生。在ASP.NET MVC中,如何在提交表單時獲取控件的名稱?

但是,在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版本而不是封裝的控件。還有,我要在這裏包括陪接受的答案一個方便的評論:

你應該使用FCKEditor的控制JavaScript版本 不是.NET 自定義控件作爲.NET自定義 控制建立在WebForms 範式上。該JS版應具有用於HTML 的值,你可以在你的 使用控制器請求[「字段名」]

+0

控件是否有runat = server?如果是這樣,請刪除。在我的iPhone上,所以我無法驗證是否是問題 – 2008-11-30 22:03:20

+0

我需要「runat = server」部分,所以我可以在我的視圖的OnLoad中操縱控件。 – Jedidja 2008-11-30 22:05:45

+0

「OnLoad」???這意味着您在View中執行業務邏輯。很多開發人員都在使用MVC,因爲他們認爲這是新的很酷的東西。你在做什麼應該是一個非MVC應用程序。 – 2008-11-30 22:39:07

回答

6

FCKEditor的是JavaScript庫,還配備包裹在一個ASP的標準。用於Webforms的NET控件。所以,如果沒有ASP.NET控件,使用FCKEditor javascript會更容易。以這種方式融入MVC會更容易。

如果您必須使用ASP.NET控制版本,那麼您將遇到這些類型的問題。但一個解決方案是將FCKeditor放置在標準的webforms頁面上,然後在使用Greybox之類的對話框中顯示。

-1

是否使用一個WebForm控件訪問一個 隱藏字段?據我所知,默認的ASP.NET MVC視圖引擎不會破壞控件ID。

+0

這是什麼意思?我嘗試用<%= Html.BeginForm ..%>替換

,但它沒有任何區別。 – Jedidja 2008-11-30 22:27:16

-2

一個選項是在提交按鈕後面寫一些javascript,它將把表單post變量設置爲你想要的。您可以使用隱藏字段,更新您的AuthorBio更新,或者您可以在提交時以編程方式對其進行設置。

-1

傳統的ASP.NET:runat =「server」 ASP.NET MVC = no「runat = server」控件。

您沒有正確使用MVC。你想使用「runat = server」控件的事實意味着你應該做一個傳統的ASP.NET應用程序。

這是一個半老的文章,但你可能要檢查它獲得ASP.NET MVC和的區別:http://www.singingeels.com/Articles/ASPNET_MVC_in_the_Real_World.aspx

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 
} 
相關問題