2017-09-14 8 views
0

私は現在、自分の仕事のためにASP.net MVCを学習しています。現在、C#コード(データベースをシミュレートする)のハードコードされたリストと、メニューを表示するCreateボタンがあり、新しい人物の情報を追加してから、作成ボタンをクリックすることができるWebページがありますそれを追加するには下部にあります。ただし、作成ボタンは現在動作しません。その入力を受け取り、それをリストに追加するメソッドを作成するにはどうすればよいのですか。 PersonController? PersonModel?助けてくれてありがとう!ウェブサイトから入力してC#リストに追加する

namespace ASPpractice.Controllers 
    { 
     public class PersonController : Controller 
     { 

    List<PersonModel> people = new List<PersonModel>(); 

    // GET: Person 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Person() 
    { 


     people.Add(new PersonModel {Age = 76, Name = "Rick", Title = "Drunk Mad Scientist"}); 
     people.Add(new PersonModel {Age = 13, Name = "Morty", Title = "Tool of a Grandson"}); 
     people.Add(new PersonModel {Age = 35, Name = "Jerry", Title = "Unemployed Dumbass Father"}); 

     return View(people); 
    } 

    public ActionResult Create() 
    { 
     return View(); 
    } 
} 

}

namespace ASPpractice.Models 
    { 
     public class PersonModel 
     { 
    private string _Name; 
    private string _Title; 
    private int _Age; 

    public string Name { get { return _Name; } set { this._Name = value; }} 
    public string Title { get { return _Title; } set { this._Title = value; } } 
    public int Age { get { return _Age; } set { this._Age = value; } } 

} 

}

@model ASPpractice.Models.PersonModel 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 


@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 

<div class="form-horizontal"> 
    <h4>PersonModel</h4> 
    <hr /> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.Age, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Age, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Age, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create" class="btn btn-default" /> 
     </div> 
    </div> 
</div> 

は}

<div> 
    @Html.ActionLink("Back to List", "Person") 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 
+3

それは本当にASP.NET MVC上のいくつかのチュートリアルから利益を得ることができるあなたの学習経験のように聞こえます。例:https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/getting-started本質的には、2つの 'Create'アクションがあります。ユーザーはオブジェクトを作成するための値を入力するためのビューを表示し、もう一方はそれらの値のフォームポストを受け入れ、新しく作成されたオブジェクトをデータベースに保存します。保存すると、ユーザーを再度インデックス/リストビューにリダイレクトして、すべてのオブジェクトを再度表示します。 – David

+0

ああ、このチュートリアルは私が必要としたものかもしれないようです。私はmvcモデルのためのmsdnに関するいくつかの文書を読みましたが、何とか私はこの問題を遭遇しませんでした。ありがとうございました。 –

答えて

1
public ActionResult Create(){} 
[HttpPost] 
public ActionResult Create(PersonModel model) 
{ 
    people.Add(new PersonModel {Age = model.Age, Name = model.Name, Title =model.Title}); 
    return View(); 
} 
+0

これは動作しませんが、作成ボタンをクリックすると新しい人の情報を記入するときのテキストが消えません。それだけでそこにとどまる。しかし、私がリストページに戻ると、新しい名前は表示されません。 –

+1

これを試してください: 静的リスト人=新しいリスト(); –

+0

クローサー...それを追加しましたが、リスト上の他のすべてのアイテムの重複も追加しました。なぜ私はそれが静的なこのような行動を変更したのか分からないのですか? –

0

何をする必要がコントローラにメソッドを呼び出すですwhic hがリストに入力されます。 一見してEditorForsは正常であり、モデルを正しく入力する必要があります。

@using (Html.BeginForm("ActionMethod","Controller",FormMethod.Post)) 

を使用して

はあなたPersonModelを受け入れる必要があり、あなたのActionMethodを呼び出します。

public ActionResult ActionMethod(PerosnModel vm)... 

ここには、提出されたモデルで必要なことを行います。 (つまり、dbテーブルに追加、投稿、保存または表示)。

これが役に立ちます。

1

ウェブサイトでは、コントローラは、コントローラ内のアクションが要求されている電子ACH時間を作成しているように、あなたがにそれを追加したいあなたのリストは、あなたのコントローラ内に存在することはできません....基づいて要求されています。

これは実際にあなたのリストを毎回リセットします。

あなたはどこからでもアクセス可能である静的リストを作成する必要があります....

+0

私は参照してください。これは練習用のものなので、リクエストが作成されるたびにリストをクリアしてから、リストをクリアして更新します。そうして私は重複していない。 (これもまた学習の目的のためだけのものですが、実際にはSQLサーバデータベースを持っています) –

+0

'リストをクリアしてから、それを再作成して更新しますか?それはあまり意味がありません。私は非常にDBを作成することを強くお勧めします。 'Code First'を見てください。そうでなければ、静的なクラスを作成する必要があります。静的なクラスは、リクエスト間で 'added/modifcations'を持続させることができます。次に、一種のシングルトンパターンを研究する必要がありますが、まずは基礎を身に付けるべきだと思います。要求を超えてアクセス可能なStaticクラスを取得する方法、またはDBを実装する方法を学んでください。 – Seabizkit

+0

私は言ったことをやったが、今はうまくいく。私はあなたに同意する、私は戻って、この他のもののいくつかを学び、定期的なデータベースを取得する必要があります。助けてくれてありがとう。 –

関連する問題