【问题标题】:Getting input value on submit MVC 3在提交 MVC 3 时获取输入值
【发布时间】:2011-08-15 12:20:51
【问题描述】:

我已经设置了默认的 MVC 3 应用程序并且我是新手,但是当我在单击提交按钮后尝试从输入字段打印值时遇到了问题。

这是一个简单的注册表单,底部有一个提交按钮。当我单击提交按钮时,什么都不会发生,期望输入字段之一的文本应打印到标签或提交按钮下方的东西上。我完全不知道如何做到这一点,我试图制作一个带有 id 的标签,但我无法访问输入字段值或标签。

控制器动作如下所示:

[HttpPost]
        public ActionResult Create(Person person)
        {
            if (ModelState.IsValid)
            {
                db.Persons.Add(person);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }

            return View(person);
        } 

完整的表格如下所示:

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>

        <div class="editor-label">
            @Html.LabelFor(model => model.Firstname)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Firstname)
            @Html.ValidationMessageFor(model => model.Firstname)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Lastname)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Lastname)
            @Html.ValidationMessageFor(model => model.Lastname)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Email)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Email)
            @Html.ValidationMessageFor(model => model.Email)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Phone)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Phone)
            @Html.ValidationMessageFor(model => model.Phone)
        </div>
        <p>
            <button id="btn_Register">
                <span class="ui-button-text">Register</span>
            </button>
        </p>               
    </fieldset>
 }

【问题讨论】:

  • 你的Controller Action 是什么样子的?
  • 表单的其余部分是什么样的?
  • MVC 与 asp.net 完全不同。当您说“既不访问输入字段值也不访问标签”时,您是否希望能够在代码中执行此操作?
  • @Tim:没想到,但我是 MVC 新手,所以不知道如何从输入字段中获取值并将该值放入新标签中,仅此而已。

标签: c# asp.net-mvc asp.net-mvc-3 forms razor


【解决方案1】:

为了从发布的表单中获取所有值,它们将位于(在您的示例中)person 对象内。

要在标签中输出值,您需要使用新值修改person 对象,然后在视图上输出此值。

例如

person.labelvalue = "foo";

<span>@model.labelvalue</span>

我建议你在从 asp.net 迁移到 asp.net mvc 之前先看看 asp.net/mvc 作为起始基地

【讨论】:

  • 对于不属于模型的值,您还可以使用 ViewBagViewDataTempData
  • 是的,这些也是一种选择。
【解决方案2】:

您可以通过按钮提交进入控制器,获取输入字段值并将其设置为您想要的标签。但是,如果它只是在单击按钮时设置标签文本,那么您不需要任何服务器端代码,也就是说 MVC 代码。只需使用简单按钮而不是提交按钮。为按钮单击编写一个 JavaScript/jQuery 事件/函数,并从所需的输入字段中设置标签文本。比如……

$("#fooLabel").text($("#fooTextEditor").val());

为此,您必须知道这两个控件的 ID。由于没有内置重载使用@Html.EditorFor 或@Html.LabelFor 向字段提供Id,您可以像本文中建议的那样覆盖HtmlHelper。 How to specify ID for an Html.LabelFor<> (MVC Razor)

或者更简单的是,您可以使用任何浏览器开发工具来查找为两个控件生成的 Id,并直接在您的 JaveScript/jQuery 中使用它们。通常与模型字段名称相同。

【讨论】:

  • 您将属性名称作为每个控件的 ID。您的模型的属性 FirstName 将是 id FirstName。因此 $("#FirstName").val() 应该足够从 jquery 使用中获得。
【解决方案3】:

由于您不想提交页面或任何其他操作,您必须使用 java 脚本或 Jquery 在客户端执行此操作。在 java 脚本中,只需将 onclick 事件添加到 btn_Register 按钮并将标签的值设置为文本字段。如果您在单击事件中使用 jquery,请按以下方式分配值

btn_Register.click(function(){
    $("#label1").text($('txtfield1').val());
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多