2016-11-24 2 views
0

私の会社のためにWakeUpプログラムを作成しました。私はASP.NETで初めてです。 文字列dnsNameIpAddressMacAddress、およびメソッドWakeUP()を持つホストクラスがあります。これで、onButtonClickイベントによってModel [i]のインスタンスのWakeUPメソッドを呼び出すボタンが必要になりました。助けのためのAsp.Net MVC buttonClickイベントでクラスのインスタンスからメソッドを呼び出す方法

@for (int i = 0; i < Model.Length; i++) 
{ 
    <tr> 
     <td>@Model[i].DnsName</td> 
     <td>@Model[i].IpAddress</td> 
     <td>@Model[i].MacAddress</td> 
     <td> 
      --> Here I need a button to call the wakeUp() method from Model[i] 
     </td> 
    </tr> 
} 

感謝:)

+0

「WakeUP」はあなたの 'Model'のメソッドですか?サーバ側?次に、サーバーに要求する必要があります。 – smoksnes

+1

あなたのモデルは単なるdtoオブジェクトです。そこからメソッドを呼び出すべきではありません。モデルをパラメータとして受け入れるアクションメソッドをコントローラに実装するだけです。 –

+0

私はこれを試してみましたが、例外が発生します – Desiigner

答えて

1

はのは、あなたのモデルServerを呼ぶことにしましょう、そしてそれのルックスからの眺めは(...またはListIEnumerableなど)Serverのアレイを有します。以下のコードではアンカーが追加され、Idが得られたと仮定してをルートにしてIdServerに渡します。そうでない場合は、特定のServerに固有のものを渡すことができます。モデル全体を送信する必要がないので、これは非常に便利です。単にIdを渡して、Controllerが代わりにその部分を処理するようにしてください。 Controllerは、Idに基づいて正しいServerインスタンスを取得し、その後起動します。

ビュー:

@model Server[] 

<! -- Other stuff --> 
<table> 
@for (int i = 0; i < Model.Length; i++) 
{ 
    <tr> 
     <td>@Model[i].DnsName</td> 
     <td>@Model[i].IpAddress</td> 
     <td>@Model[i].MacAddress</td> 
     <td> 
      @Html.ActionLink(string.Format("Wake up {0}", Model[i].DnsName), "WakeUp", "Home", new {id = @Model[i].Id}) 
     </td> 
    </tr> 
} 
</table> 

そして、あなたのコントローラ:

public class HomeController : Controller 
{ 
    [HttpGet] 
    public ActionResult WakeUp(int id) 
    { 
     // id will be the id of the server. 
     // Do your logic here. 

     return View(); // Or whatever you want to return. 
    } 
} 

あなたもし本当には、あなたの代わりにpostを行う必要があり、モデル全体を渡す必要があります。しかし、私はあなたが必要とは思わない、モデルはサーバー生成され、返信する必要はないようだから。ユーザー入力はありません。

最後に、モデルにビジネスロジックを持たないでください。したがって、WakeUP()と呼んでいるメソッドは、Serverオブジェクトに含まれていてはいけません。コントローラー、マネージャー、または他のどこかでそれを行うと、その方法にIdを渡す方が良いと思います。このようなもの:

public class HomeController : Controller 
{  
    [HttpGet] 
    public ActionResult WakeUp(int id) 
    { 
     // Possibly some validation here? 

     // Send the id to the manager. 
     var manager = new WakeUpManager(); 
     manager.WakeUp(id); 

     return View(); // Or whatever you want to return. 
    } 
} 

public class WakeUpManager 
{ 
    public void WakeUp(int serverId) 
    { 
     // Wake the server up... or snooze... or whatever. :) 
    } 
} 
+1

:Dありがとうございます:) – Desiigner

+0

@Desiigner - Cool。お役に立てて嬉しいです。あなたのプロジェクトで幸運を祈り、StackOverflowへようこそ! – smoksnes

関連する問題