2012-03-16 2 views
0

У меня есть простая форма html и модель, соответствующая форме на основе связующего по умолчанию. HTTPPOST отлично работает и получает все значения формы в модель при отправке формы. Однако я ожидал, что HTTP GET отобразит форму с именем пользователя по умолчанию Hello. Но представление отображает пустую форму. Может ли кто-нибудь объяснить мне, почему связующее устройство по умолчанию не может вывести значения в форму по запросу GET, но может получить значения из моей формы в модель по запросу POST. Благодарю.MVC3 Model Binding и GET Request

----- ----- CONTROLLER

[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, насколько это возможно. –

+0

@RekhaJayaram, модельное связующее используется для анализа опубликованных значений. Если вы хотите вывести значение в поле ввода в HTML, вам нужно будет использовать атрибут value: ' 'именно это делают помощники. –

+0

Большое спасибо за то, что нашли время, чтобы объяснить это. Это действительно помогло мне понять, что происходит. –

1

Заменить HTML Textbox с этим:

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

В противном случае .net не в состоянии заполнить значение поля ...

+0

спасибо, что сработало. –