2017-09-09 6 views
0

私は学生を検索し、テキストボックスに入力された値に基づいて学生レコードを表示しようとしています。 Jqueryを使わずに値を渡す方法がわかりません。方法はありますか?アクションリンクをクリックするとビューからパラメータを渡してコントローラを呼び出す必要があります

コントローラー:

[Authorize] 
     public ActionResult GetStudentsByName(string name) 
     { 
      SchoolDbEntities db = new SchoolDbEntities(); 
      var student = db.Students.Where(s => s.StudentName.Contains(name)); 
      return View(student); 

     } 

ビュー

<div class="panel-body"> 
      <div class="form-group"> 
       @Html.LabelFor(m=> m.SearchEntity.StudentName,"Search Student") 
       @Html.TextBoxFor(m => m.SearchEntity.StudentName, new { @class = "form-control" }) 
      </div> 

     </div> 

    <div class="panel-footer"> 

       <button type="button" onclick="location.href='@Url.Action("GetStudentsByName", "Student")'" class="btn btn-primary">Search <i class="glyphicon glyphicon-search"></i></button> 

       <button id="Reset" 
         class="btn btn-primary btn-sm"> 
        <i class="glyphicon glyphicon-share-alt"></i> &nbsp;Reset 
       </button> 
      </div> 

私は、@のUrl.Action( "GetStudentsByName"、 "学生" では、PARAMを渡す必要があります{新しいです@ name = 'テキストボックスの値')

また、Getメソッドであり、httpPostではありません。

答えて

0

入力フォーム要素をフォームコントロール内に保持し、GETメソッドを使用してフォームを送信できます。あなたがしたくていけない場合

ボタンがテキストボックスにあなたがそれを行うことができ、特定のクラスを与えることによって、その後、送信ボタンを作る入力要素名は、あなたのアクションメソッドのパラメータ名と

@using (Html.BeginForm("GetStudentsByName","Student",FormMethod.Get)) 
{  
    <input type="text" name="name"/> 
    <button type="submit" class="btn btn-primary">Search </button> 
} 
+0

ボタンをクリックしてコントローラメソッドにブレークポイントを設定すると、ブレークポイントで一時停止しますか?私は同じことを試みているが起こっていない –

+0

はい。検索ボタンをクリックすると、GETメソッドを介して 'GetStudentsByName'アクションメソッドにフォームを送信します。クエリー文字列のテキストボックスに入力された名前が表示されます。 'GetStudentsByName'アクションメソッドにブレークポイントを置き、' name' paramの値を調べると、クエリーストリングで同じ値を見ることができます。 – Shyju

+0

回答にあるとおり、ボタンが送信タイプであることを確認してください。 – Shyju

0

と一致することを確認します。

<div class="panel-body"> 
     <div class="form-group"> 
      @Html.LabelFor(m=> m.SearchEntity.StudentName,"Search Student") 
      @Html.TextBoxFor(m => m.SearchEntity.StudentName, new { @class = "form-control,txt-input" }) 
     </div> 

    </div> 

<div class="panel-footer"> 

      <button type="button" onclick="location.href='@Url.Action("GetStudentsByName", "Student",new { data= "STUDENT_NAME" })'.replace("STUDENT_NAME", $('.txt-input').val())" class="btn btn-primary">Search <i class="glyphicon glyphicon-search"></i></button> 

      <button id="Reset" 
        class="btn btn-primary btn-sm"> 
       <i class="glyphicon glyphicon-share-alt"></i> &nbsp;Reset 
      </button> 
     </div> 

私はこのような長いバックを試しました、私はそれが動作するはずだと思います。

0

では、コントローラにビューから値にアクセスすることができ、この

ビュー

@using (Html.BeginForm("GetStudentsByName", "Home")) 
{ 
    <div class="form-group"> 
     @Html.LabelFor(m => m.StudentName, "Search Student") 
     @Html.TextBoxFor(m => m.StudentName, new { @class = "form-control" }) 
    </div> 

    <input type="submit" value="Search" class="btn btn-primary" /> 
} 
</div> 

コントローラRequest.Form["StudentName"]を使用して

public ActionResult GetStudentsByName() 
    { 
      string name = Request.Form["StudentName"] 
      SchoolDbEntities db = new SchoolDbEntities(); 
      var student = db.Students.Where(s => s.StudentName.Contains(name)); 
      return View(student); 
    } 

を試してみてください。また、もう1つの提案は、usingステートメントを使用すると、未処理のメモリを管理するのに役立ちます。たとえば、

public ActionResult GetStudentsByName() 
{ 
     string name = Request.Form["StudentName"] 
     using(SchoolDbEntities db = new SchoolDbEntities()) 
     { 
     var student = db.Students.Where(s => s.StudentName.Contains(name)); 
     return View(student); 
     } 
} 
関連する問題