【发布时间】:2014-04-03 18:25:57
【问题描述】:
每当我运行此代码时,我在将结果从控制器传递到从 httppost 方法查看时都会遇到问题。服务器端代码很好,只是当我在计算器中分配新结果时。结果属性我永远不会在视图的文本框中看到新分配的值。其余属性填充了适当的值。
谁能帮我解决这个问题?还是我错过了什么?
谢谢
这是我的 .cshtml 代码
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div class="row">
<div class="span2">
@Html.LabelFor(x => x.FirstNumber)
</div>
<div class="span2">
@Html.TextBoxFor(x => x.FirstNumber)
</div>
<div class="field-validation-error">
@Html.ValidationMessageFor(x => x.FirstNumber)
</div>
</div>
<br />
<div class="row">
<div class="span2">
@Html.LabelFor(x => x.SecondNumber)
</div>
<div class="span2">
@Html.TextBoxFor(x => x.SecondNumber)
</div>
<div class="field-validation-error">
@Html.ValidationMessageFor(x => x.SecondNumber)
</div>
</div>
<br />
<div class="row">
<div class="span2">
@Html.LabelFor(x => x.SelectedFunction)
</div>
<div class="span2">
@Html.DropDownListFor(x => x.SelectedFunction, Model.Functions, "Please Make a Selection")
</div>
<div class="field-validation-error">
@Html.ValidationMessageFor(x => x.SelectedFunction)
</div>
</div>
<br/>
<div class="row">
<div class="span2">
@Html.Label("Result: ")
</div>
<div class="span2">
@Html.TextBoxFor(x => x.Result)
</div>
</div>
<br />
<div class="row">
<input type="submit" value="Load" />
</div>
}
这是我的控制器代码
[HttpPost]
public ActionResult Index(CalculatorViewModels calculator)
{
//If the entries are valid
if (ModelState.IsValid)
{
try
{
double firstNum = calculator.FirstNumber;
double secondNum = calculator.SecondNumber;
string selectedFunction = calculator.SelectedFunction;
double result = -1;
if (selectedFunction.Equals("1"))
{
result = service.CombinedWith(firstNum, secondNum);
}
else if (selectedFunction.Equals("2"))
{
result = service.Either(firstNum, secondNum);
}
calculator.Result = Convert.ToString(result);
return View(calculator);
}
catch(Exception ex)
{
calculator.Result = "Error in calculating probability "+ex.Message;
return View(calculator);
}
}
//entries are not valid
else
{
return View(calculator);
}
}
这是我的视图模型
公共类 CalculatorViewModels {
[Required(ErrorMessage = "Please enter a Number between zero and one")]
[Display(Name = "FirstNumber")]
[Range(0, 1)]
public double FirstNumber { get; set; }
[Required(ErrorMessage = "Please enter a Number between zero and one")]
[Display(Name = "Second Number")]
[Range(0, 1)]
public double SecondNumber { get; set; }
[Required(ErrorMessage = "Please Select at least one function")]
[Display(Name="Please Select a Function")]
public string SelectedFunction { get; set; }
//will be used to report exception as well if needed
public string Result { get; set; }
public List<SelectListItem> Functions
{
get
{
return new List<SelectListItem>()
{
new SelectListItem{ Text="CombinedWith",Value="0"},
new SelectListItem{Text="Either",Value="1"}
};
}
}
}
【问题讨论】:
-
对于踢腿和咯咯笑,添加一个“字符串 testResult =calculator.Result;”在“calculator.Result = Convert.ToString(result);”之后并添加一个断点以确保该值实际上已分配给模型
-
@dave k 我已经这样做了。不过,可以使用一种解决方法来查看包
-
你确定你没有抛出异常吗?我们不知道什么是“服务”或方法是做什么的。尝试注释掉 try/catch 块,看看是否引发了任何异常。
-
这很可能是
ModelState在使用 HTML 帮助程序时优先于您的模型的结果。您需要使用ModelState.Remove()清除ModelState["Result"]。参见例如stackoverflow.com/questions/17680982/… 以获得更详尽的解释。 -
哇,一个小时内有 2 个答案,对于一个一年前的问题......
标签: asp.net .net asp.net-mvc web