【发布时间】:2016-10-28 05:24:39
【问题描述】:
我有一个任务是实现 WCF 服务并从任何类型的客户端调用它。我已经有一些控制台、winform、WPF 应用程序的经验,所以我想借此机会学习 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。您熟悉使用 ViewModel 吗?
-
不要使用 Request.Form 来获取值,而是按照 Geoff James 的建议创建一个 ViewModel。然后,您在控制器操作中使用该模型来获取所有值。因此,不要传入“char operation”,而是传入“SimpleMathVM model”。您只需使用所需的任何表单值创建 SimpleMathVM 类(确保表单值的名称与模型属性名称匹配)。如果你想用以前的表单值返回表单,那么只需将视图模型传回视图。所以你的最后一行是:return View("Index", ViewModel).
-
@firecape:为什么不让它成为答案而不是评论?
-
@GeoffJames 是的,在一定程度上。我在 Xamarin 中对此有更多经验,但我相信这几乎都是一样的。 @firecape 谢谢。我同意这可以作为答案发布。
标签: c# html asp.net asp.net-mvc razor