0

我的 mvc 视图中有一个文本框。我想在 beginform 路由值中传递文本框数据。怎么做?

看法:

@using (Html.BeginForm("Index", "InwardDetail", FormMethod.Post))
{
    <fieldset style="width:80%;margin-left:auto;margin-right:auto;margin-top:20px;min-width:60%">
         <div>
            <table class="tableView" style="width:100%">
                <tr>
                    <td>
                        @Html.DevExpress().Label(lbl=>{
                       lbl.Name = "lblFromDate";
                       lbl.Text = "From Date";
                   }).GetHtml()
                    </td>
                    <td>
                        @Html.TextBox("txtFromDate", value: DateTime.Now.ToString("dd/MM/yyyy"), htmlAttributes: new {id="fromDate", Class="textbox",style="width:70px"})
                    </td>

                    <td>
                        @Html.DevExpress().Button(but=>{
                       but.Name = "butView";
                       but.Text = "View";

                       but.UseSubmitBehavior = true;
                                       }).GetHtml()
                    </td>
                </tr>
                <tr>
                    <td colspan="9">
                        @Html.Partial("InwardDetailPartial")
                    </td>
                </tr>
            </table>
        </div>
    </fieldset>
}

控制器:

public ActionResult Index(string fDate)
        {
            _unitOfWork = new UnitOfWork();
            blInwarddetail = new InwardRegisterBL(_unitOfWork);
            var result = blInwarddetail.GetInwardList(fDate);
            return View("Index", result);
        }

如果我单击按钮,则值应传递给控制器​​。

4

1 回答 1

0

您的使用@Html.TextBox("txtFromDate", ..)意味着您使用name="textFromDate". 当您提交表单时,表单控件的名称/值对将被发送 - 在您的情况下它将是txtFromDate: 27/06/2015.

但是您发布的方法没有名为的参数txtFromDate(只有一个名为fDate)。您需要将方法更改为

[HttpPost]
public ActionResult Index(string txtFromDate)
{
  ....
}

但是,您的代码有许多问题需要解决

首先,您应该创建一个视图模型来表示您想要在视图中显示/编辑的内容

public class FilterViewModel
{
  [Display(Name = "...")] // some user friendly display name
  [Required(ErrorMesage = "Please enter a valid date")]
  public DateTime Date { get; set; }
}

请注意,从您显示的代码中可以看出,您输入的是日期,而不是字符串,因此属性应该是DateTime(而不是string)。这还可以确保您获得该属性的客户端和服务器验证。我还给您的属性一个更具描述性的名称fDate(我无法开始猜测这可能意味着什么 - 也许是 FinishDate?)

在 GET 方法中

public ActionResult Index()
{ 
  FilterViewModel model = new FilterViewModel();
  model.Date = DateTime.Today;
  return View(model);
}

并且在视图中

@model yourAssembly.FilterViewModel
@using (Html.BeginForm())
{
  ....
  @Html.LabelFor(m => m.Date)
  @Html.TextBoxFor(m => m.Date, "{0:dd/MM/yyyy}", new { @class = "textbox" })
  @Html.ValidationMessageFor(m => m.Date)
  ....
}

请注意,您现在已强烈绑定到您的模型属性。第二个参数指定格式字符串。似乎不需要覆盖id属性(将是id="Date"),并添加一个类名 use @class = ".."。另请注意,由于您要添加类名,因此应删除style="width:70px"并改为使用 css。您还应该删除表格元素。Html 表格元素用于表格数据,而不是用于布局。

最后 post 方法将是

[HttpPost]
public ActionResult Index(FilterViewModel model)
{
  if (!ModelState.IsValid)
  {
    return View(model);
  }
  // model.Date will contain the value enter by the user
}

最后我会质疑这是否真的应该是一个帖子。从代码中,您似乎没有更改任何数据,也许这应该是FormMethod.GET?或者更好的是,使用 ajax 根据过滤器更新当前页面。

于 2015-06-27T10:31:29.543 回答