ASP.NET MVC2:从视图获取文本框数据到控制器

问题描述 投票:0回答:4

我很难将数据从文本框获取到控制器中。我在 Sanderson 的书 Pro ASP.NET MVC Framework 中读到了一些实现此目的的方法,但没有取得任何成功。

此外,我在网上遇到了一些类似的问题,但也没有取得任何成功。好像我错过了一些相当基本的东西。

目前,我正在尝试使用动作方法参数方法。有人可以指出我哪里出错或提供一个简单的例子吗?提前致谢!

使用 Visual Studio 2008、ASP.NET MVC2 和 C#: 我想做的是获取在“调查员”文本框中输入的数据,并使用它来过滤控制器中的调查员。我计划在 List 方法(已经可以使用)中执行此操作,但是,我正在使用 SearchResults 方法进行调试。

这是我视图中的文本框代码,SearchDetails:

    <h2>Search Details</h2>

 <% using (Html.BeginForm()) { %> 
 <fieldset>
     <%= Html.ValidationSummary() %>
     <h4>Investigator</h4>
     <p>
        <%=Html.TextBox("Investigator")%>
        <%= Html.ActionLink("Search", "SearchResults")%>
     </p>
  </fieldset>
 <% } %>

这是来自我的控制器 InvestigatorsController 的代码:

    private IInvestigatorsRepository investigatorsRepository;
    public InvestigatorsController(IInvestigatorsRepository investigatorsRepository)
    {

        //IoC:
        this.investigatorsRepository = investigatorsRepository;
    }

    public ActionResult List()
    {
        return View(investigatorsRepository.Investigators.ToList());
    }

    public ActionResult SearchDetails()
    {
        return View();
    }

    public ActionResult SearchResults(SearchCriteria search)
    {
        string test = search.Investigator;

        return View();
    }

我有一个调查员班级:

    [Table(Name = "INVESTIGATOR")]
public class Investigator
{
    [Column(IsPrimaryKey = true, IsDbGenerated = false, AutoSync=AutoSync.OnInsert)]
    public string INVESTID { get; set; }

    [Column] public string INVEST_FNAME { get; set; }
    [Column] public string INVEST_MNAME { get; set; }
    [Column] public string INVEST_LNAME { get; set; }
}

并创建了一个 SearchCriteria 类,看看我是否可以让 MVC 将搜索条件数据推送给它并在控制器中获取它:

    public class SearchCriteria
{
    public string Investigator { get; set; }
}

}

我不确定项目布局是否与此有关,但我正在使用 Sanderson 建议的 3 项目方法:DomainModel、Tests 和 WebUI。 Investigator 和 SearcCriteria 类位于 DomainModel 项目中,此处提到的其他项目位于 WebUI 项目中。

再次感谢您提供任何提示、技巧或简单示例!

迈克

asp.net-mvc-2
4个回答
0
投票

尝试强烈键入页面以使用 SearchCriteria 自动发布数据,例如:

public partial class Search: ViewPage<SearchDetails>

0
投票

这应该为你做(无法验证这是完美的 - 从记忆中输入):

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SearchDetails(FormCollection formValues)
{
    var txtContents = formValues["Investigator"];

    // do stuff with txtContents

    return View();
}

0
投票

谢谢大家的提示。出于学习目的,我需要返回并遵循强类型路线。我很好奇如果我从一开始就这样做,我是否会遇到这个问题。

在那之前,以下方法有效:

  1. 使用提交按钮
  2. 使用此代码的形式:

    <% using(Html.BeginForm(new { Action = "SearchResults"})) { %> <% } >
    

再次感谢您的帮助!

迈克


0
投票

1.) 您是否研究过视图的视图模型?从本质上讲,这就是您的 SearchCriteria 类。确保您使用该模型强烈键入您的视图:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/MyMaster.Master" Inherits="System.Web.Mvc.ViewPage<SearchCritieria>"
  1. 还要确保使用 HtmlHelper.TextBoxFor 方法将此 Investigator 属性映射到 SearchCritiera 模型。在回发时,您的文本框值应该在那里:

    '<%=Html.TextBoxFor(model => 模型.调查员)%>'

祝你好运!

这里还有一个关于使用 ViewModels 的很好的参考,我最近看了很多:

链接

© www.soinside.com 2019 - 2024. All rights reserved.