【问题标题】:MVC3 Model Binding and GET RequestMVC3 模型绑定和 GET 请求
【发布时间】:2012-03-16 14:08:16
【问题描述】:

我有一个简单的 html 表单,以及基于默认活页夹的表单对应的模型。 HTTPPOST 工作正常,并在提交表单时将所有表单值放入模型中。 但是,我希望 HTTP GET 显示用户名默认为 Hello 的表单。但是视图显示一个空白表单。有人可以向我解释为什么默认模型绑定器无法通过 GET 请求将值推送到表单中,但能够通过 POST 请求将值从我的表单中获取到模型中。谢谢。

-----控制器 -----

[HttpPost]
    public ActionResult Index(SimpleFormModel application)
    {
        return View(application);
    }
[HttpGet]
    public ActionResult Index ()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";
        SimpleFormModel simplefm = new SimpleFormModel();
        simplefm.UserName = "Hello";
        return View(simplefm);
    }

---型号---

public class SimpleFormModel
{
    public string UserName { get; set; }
    public string Dob { get; set; }
    public string Email { get; set; }

}

--------查看--------------

@model MVC3MobileApplication.Models.SimpleFormModel
@{
ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>


<form action="">
<fieldset>
<legend>Personal information:</legend>
Name: <input type="text" size="30" name="SimpleFormModel.UserName" /><br />
E-mail: <input type="text" size="30" name ="SimpleFormModel.Email"/><br />
Date of birth: <input type="text" size="10" name ="SimpleFormModel.Dob"/>
</fieldset>
</form> 

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    您需要使用 HTML 助手来生成您的输入字段,而不是像以前那样对它们进行硬编码:

    @model MVC3MobileApplication.Models.SimpleFormModel
    
    @{
        ViewBag.Title = "Home Page";
    }
    
    <h2>@ViewBag.Message</h2>
    
    @using (Html.BeginForm())
    {
        <fieldset>
            <legend>Personal information:</legend>
            Name: @Html.TextBoxFor(x => x.UserName, new { size = "30" })
            <br />
            E-mail: @Html.TextBoxFor(x => x.Email, new { size = "30" })
            <br />
            Date of birth: @Html.TextBoxFor(x => x.Dob, new { size = "10" })
        </fieldset>
    
        <button type="submit">OK</button>
    }
    

    HTML 助手将使用模型值生成相应的输入字段并填充它们。

    【讨论】:

    • 我认为如果默认绑定程序被编程为使它们脱离请求并绑定到帖子上的模型,即使没有 html 助手,它也可以以其他方式工作,而不必使用 htmlhelpers .我希望保持视图尽可能纯 html。
    • @RekhaJayaram,模型绑定器用于解析发布的值。如果要在 HTML 的输入字段中输出值,则必须使用 value 属性:&lt;input type="text" size="30" name="SimpleFormModel.UserName" value="some value" /&gt;,这正是助手所做的。
    • 非常感谢您花时间解释这一点。这真的帮助我理解了发生了什么。
    • @RekhaJayaram,如果这个答案对你有帮助,请确保点击旁边的勾号mark it as the answer
    【解决方案2】:

    用这个替换你的 HTML 文本框:

    @Html.TextBoxFor(m=>m.UserName)
    

    否则.net无法填充字段的值...

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      相关资源
      最近更新 更多