如何解决如何将用户数据从视图传递到控制器并返回罗马数字
我正在MVC中开发一个Web应用程序,当用户输入数字时,会将其转换为罗马数字。我已经完成了转换方法和基本视图页面。我正在努力通过httppost操作结果方法获取输入的数据,然后通过转换方法运行它。
到目前为止,这是我的控制器:
public class ConvertController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(FormCollection form)
{
}
public void OnConvertClicked(object sender,EventArgs e)
{
//Button clicked
try
{
int number = Convert.ToInt32(myTextBox.Text);//Convert to number
string romanNumber = ToRomanNumber(number);//Get roman number
}
catch (Exception ex)
{
//The user input was not a number...
myTextBox.Text = "Error";
}
}
public string ToRomanNumber(int num)
{
var listofNum = new List<int>() { 1000,900,500,400,100,90,50,40,10,9,5,4,1 };
var listofRoman = new List<string>() { "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };
var numToRoman = "";
for (int i = 0; i < listofNum.Count; i++)
{
while (num >= listofNum[i])
{
numToRoman += listofRoman[i];
num -= listofNum[i];
}
}
return numToRoman;
}
}
这是我的观点
@{
ViewBag.Title = "Index";
}
<h2>Numeral Converter</h2>
<fieldset>
<legend>Convert numbers to roman numerals</legend>
@using (Ajax.BeginForm("Index","ConvertController",new AjaxOptions { UpdateTargetId = "ConversionDeatils" }))
{
<div id="divInterestDeatils"></div>
<ol>
<li>
@Html.Label("Enter Number to Convert")
@Html.TextBox("myTextBox.Text")
</li>
</ol>
<button>Convert</button>
}
</fieldset>
解决方法
您需要创建一个ViewModel
public class MyViewModel {
public string myNumber{ get; set; }
}
将您的视图更改为类似的内容
@model MyViewModel
@{
ViewBag.Title = "Index";
}
<h2>Numeral Converter</h2>
<fieldset>
<legend>Convert numbers to roman numerals</legend>
@using (Ajax.BeginForm("Index","ConvertController",new AjaxOptions { UpdateTargetId = "ConversionDeatils" }))
{
<div id="divInterestDeatils"></div>
<ol>
<li>
@Html.Label("Enter Number to Convert")
@Html.EditorFor(m => m.myNumber)
</li>
</ol>
<button id="Submit" type="Submit" value="Convert"></button>
}
</fieldset>
您的控制器要
public class ConvertController : Controller
{
public ActionResult Index()
{
MyViewModel myv = new MyViewModel();
return View(myv);
}
[HttpPost]
public ActionResult Index(FormCollection form)
{
MyViewModel myv = new MyViewModel();
decimal number = Convert.ToDecimal(form["myNumber"].ToString());
myv.myNumber = ToRomanNumber(number);
return View(myv);
}
public string ToRomanNumber(decimal num)
{
var listOfNum = new List<int>() { 1000,900,500,400,100,90,50,40,10,9,5,4,1 };
var listOfRoman = new List<string>() { "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };
var numToRoman = 0;
for (int i = 0; i < listOfNum.Count; i++)
{
while (num >= listOfNum[i])
{
numToRoman += listOfRoman[i];
num -= listOfNum[i];
}
}
return numToRoman;
}
}
尝试一下,@model MyViewModel
在这里您可能要根据视图模型的位置进行更改
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。