2012-03-16 78 views
0

我有一个简单的html表单和一个基于默认绑定器的表单对应的模型。 HTTPPOST工作正常,并在提交表单时将所有表单值提供给模型。 但我希望HTTP GET显示用户名默认为Hello的表单。但该视图显示一个空白表单。有人可以向我解释为什么默认模型联编程序无法将值推送到GET请求上的表单,但能够从POST表单中将值从我的表单中获取到POST请求中的模型中。谢谢。MVC3模型绑定和GET请求

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

[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; } 

} 

-------- VIEW ----- ---------------------

@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> 

回答

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帮助程序将使用模型值生成相应的输入字段并填充它们。

+0

我想如果默认粘合剂编程,让他们出来的即使不使用html助手,也可以在帖子上请求并绑定到模型,但它也可以在另一方面工作,而不必使用htmlhelpers。我希望尽可能保持纯html视图。 – 2012-03-16 15:21:46

+0

@RekhaJayaram,模型联编程序用于解析发布的值。如果你想在HTML中输入一个值,你必须使用value属性: '这正是帮助者所做的。 – 2012-03-16 16:46:10

+0

非常感谢您花时间解释这一点。这真的帮助我理解发生了什么。 – 2012-03-16 17:33:00

1

与此更换你的HTML文本框:

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

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

+0

谢谢你的工作。 – 2012-03-16 15:42:46