簡體   English   中英

ASP.NET MVC2表單元素名稱

[英]ASP.NET MVC2 Form Element Names

我正在嘗試使用MVC2和C#在ASP中創建一個非常簡單的表單。 我有兩個元素和一個提交按鈕,我使用VS2010中的設計器制作了表單。

視圖:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<form id="create_event" runat="server">
<h2>Create</h2>
<p>Event ID:
    <asp:TextBox ID="txtEventID" runat="server"></asp:TextBox>
</p>
<p>Event Description:
    <asp:TextBox ID="txtEventDescription" runat="server"></asp:TextBox>
</p>
<p>
    <asp:Button ID="submit" runat="server" Text="Add Event" />
</p>

</form>

</asp:Content>

我現在遇到的問題是當我嘗試訪問控制器中的表單元素時,我使用FormCollection對象獲得了奇怪的鍵名。

控制器:

public ActionResult Create(FormCollection collection)
    {
        try
        {
            // TODO: Add insert logic here
            foreach (var key in collection)
            {
                var ks = key.ToString();
                var value = collection[key.ToString()];
            }

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

兩個控件的name屬性用於鍵,它在運行時設置為ctl00 $ MainContent $ txtEventDescription和ctl00 $ MainContent $ txtEventID。 有什么方法可以通過我在設計時設置的ID來引用這些項目嗎? 我嘗試添加一個名稱屬性與id相同的值,但這不起作用。

謝謝!

從表單中刪除runat="server" ,這在MVC中是完全不需要的。 您也不應該使用表單集合,而應該使用模型綁定。 並且擺脫了<asp:*>控件,它們在MVC中毫無用處。

相反,使用Html助手<%: Html.TextBoxFor(m => model.property) %>

使用提供的Html.BeginForm()幫助器要容易得多:

<%: using (Html.BeginForm()) { %>
     .... your stuff
<%: } %>

重新閱讀后,我發現你的問題是你正在使用表單設計器來獲取標准的asp.net頁面,而不是MVC頁面。

嘗試這個:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<YourNamespace.YourModel>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<% using (Html.BeginForm("AddEvent", "YourControllerName", FormMethod.Post, new { id = "create_event" }))
     { %>
    <h2>Create</h2>
    <p>Event ID: <%= Html.TextBox("txtEventID", Model.txtEventID)%> </p>
    <p>Event Description: <%= Html.TextBox("txtEventDescription", Model.txtEventDescription)%> </p>
    <button id="submit">Add Event</button>
  <% } %>
</asp:Content>

您需要創建一個具有屬性'txtEventID'和'txtEventDescription'的模型...這是您將在第一行(尖括號之間)添加到Inherits屬性的名稱空間的模型。

你犯的錯誤是使用經典的ASP控件。 MVC處理純HTML,並使用HTML幫助程序來幫助生成它。 HTML.Textbook()就是這樣的幫手。

......事實上,沒有必要使用幫助器和模型......你可以像這樣使用直接的HTML:

<p>Event ID: <input type="text" id="txtEventID" name="txtEventID" /> </p>
<p>Event Description: <input type="text" id="txtEventDescription" name="txtEventDescription" /> </p>

我的建議:通過這里的教程: http//www.asp.net/mvc/tutorials

最后,如果您使用的是Model方法,則可以重寫Controller操作:

public ActionResult Create(YourModel Model)
    {
        Model.txtEventID ...
    }

ASP.NET MVC使用“模型綁定”將表單的值綁定到模型,因此您無需訪問FormCollection。

很多可以在這里吸收,但我的建議是再次通過教程來掌握基礎知識。 你不會后悔的。

您的設計師所做的是創建html標記,就像在Web表單中使用而不是在mvc中。 你需要的是像“cryotello”這樣的東西

你需要創建一個實體表示。

您可能感興趣的是以下項目有很好的解釋http://nerddinner.codeplex.com/

Steven Sanderson的ASP.NET MVC 2書也很好

它涵蓋了基本的東西

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM