はのは、あなたのモデルServer
を呼ぶことにしましょう、そしてそれのルックスからの眺めは(...またはList
、IEnumerable
など)Server
のアレイを有します。以下のコードではアンカーが追加され、Id
が得られたと仮定してをルートにしてId
をServer
に渡します。そうでない場合は、特定の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. :)
}
}
「WakeUP」はあなたの 'Model'のメソッドですか?サーバ側?次に、サーバーに要求する必要があります。 – smoksnes
あなたのモデルは単なるdtoオブジェクトです。そこからメソッドを呼び出すべきではありません。モデルをパラメータとして受け入れるアクションメソッドをコントローラに実装するだけです。 –
私はこれを試してみましたが、例外が発生します – Desiigner