私はWCFサービスを実装し、どのタイプのクライアントからでも呼び出すことができます。私はすでにコンソール、winform、WPFアプリについていくつかの経験がありますので、これをASP.NET MVCを学ぶチャンスとして使いたいと思っていました。ASP.NET MVCフォーム - 以前のフォームの値を持つビューに戻る正しい方法は何ですか?
私はまだ正しく "M"部分を実装していないことを知っていますが、結果を表示するためにフォーム上でデータを処理する正しい方法が、持っているこれまでのところ(作業):
ビュー:
@using (Html.BeginForm("UseSimpleMathClient", "Home"))
{
<div style="width:450px">
<table style="width:100%">
<tr><td><h4>@Html.Label("First number", new { @for = "num1" })</h4></td> <td> @Html.TextBox("num1", ViewData["num1"])</td></tr>
<tr><td><h4>@Html.Label("Second number", new { @for = "num2" })</h4></td> <td> @Html.TextBox("num2", ViewData["num2"])</td></tr>
<tr>
<td colspan="2">
<h2 style="text-align:center">
<input type="submit" name="operation" value="+" />
<input type="submit" name="operation" value="-" />
<input type="submit" name="operation" value="*" />
<input type="submit" name="operation" value="÷" />
</h2>
</td>
</tr>
<tr>
<td colspan="2"><b>@Html.Label("Result")</b> @Html.TextBox("result", ViewData["result"], new {disabled = "disabled", style="min-width:80%;text-align:center" })</td>
</tr>
</table>
</div>
}
コントローラー:
public ActionResult USeSimpleMathClient(char operation)
{
float num1, num2;
float? result = null;
if (!float.TryParse(Request.Form[0], out num1) || !float.TryParse(Request.Form[1], out num2))
{
ViewData["result"] = "Please enter valid numbers before selecting an operation.";
}
else
{
switch (operation)
{
case '+':
result = mathClient.Add(num1, num2);
break;
case '-':
result = mathClient.Subtract(num1, num2);
break;
case '*':
result = mathClient.Multiply(num1, num2);
break;
case '÷':
if (num2 != 0)
result = mathClient.Divide(num1, num2);
break;
default:
break;
}
ViewData["result"] = result != null ? String.Format("{0} {1} {2} = {3}", num1, operation, num2, result) : "You can't divide by zero!";
}
ViewData["num1"] = Request.Form[0];
ViewData["num2"] = Request.Form[1];
return View("Index");
}
こんにちは@Dinerdo、以前はWPFを使用したことがあるとお伝えします。あなたはViewModelsを使い慣れていますか? –
Request.Formを使用して値を取得する代わりに、Geoff Jamesが提案したようにViewModelを作成します。次に、コントローラーアクションでそのモデルを使用して、すべての値を取得します。したがって、 'char operation'を渡す代わりに 'SimpleMathVM model'を渡します。必要なフォームの値を使ってSimpleMathVMクラスを作成するだけです(フォームの値の名前がモデルのプロパティ名と一致することを確認してください)。以前のフォームの値を持つフォームを返す場合は、viewmodelをビューに戻します。最後の行は次のようになります:return View( "Index"、ViewModel)。 – firecape
@firecape:コメントではなく答えにしてみませんか? – quetzalcoatl