[英]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.