繁体   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