2012-03-16 18 views
0

私は単純なhtmlフォームと、デフォルトのバインダに基づくフォームに対応するモデルを持っています。 HTTPPOSTは正常に動作し、フォームの送信時にすべてのフォーム値をモデルに取り込みます。 しかし、私はHTTP GETが、ユーザー名がHelloにデフォルト設定されたフォームを表示することを期待していました。しかし、ビューには空白のフォームが表示されます。誰かが親切に、デフォルトのモデルバインダーがGETリクエストのフォームに値をプッシュできないのを私に説明することができましたが、POSTリクエストでモデルからフォームへの値を取得できます。ありがとう。MVC3モデルバインディングとGETリクエスト

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

--- --- MODEL

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

} 

-------- VIEW ----- ---------------------あなたが行ったように、それらをハードコーディングするのではなく、あなたの入力フィールドを生成するHTMLヘルパーを使用する必要が

@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

@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

...フィールドの値を記入することができません.NETそうでない場合

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

htmlヘルパーを使わなくても、htmlヘルパーであっても投稿のモデルにリクエストしてバインドすることもできます。私はビューを可能な限り純粋なhtmlとして保つことを望んでいました。 –

+0

@RekhaJayaram、モデルバインダーは、転記された値を解析するために使用されます。 HTMLの入力フィールドに値を出力するには、value属性を使用する必要があります: 'これはまさにヘルパーがやることです。 –

+0

そのことを説明する時間をとってくれてありがとう。それは本当に何が起こっているのか理解してくれました。 –

1

これを使用してHTMLのテキストボックスを交換してください:デフォルトのバインダーはからそれらを取得するようにプログラムされている場合、私は思っ

+0

ありがとうございました。 –

関連する問題