我正在使用MVC方法对数组进行排序。我有一个名为" array"我必须存储一些将在运行时给出的值。在视图中我给出了一个文本框和一个按钮,用户将输入一些整数值并在每个值之后单击按钮,这将调用JavaScript函数,并在其中存储值并用逗号附加它。
然后我调用另一个函数,它将数据发送到控制器并将值存储在名为" str"的对象中。 现在我想在我的数组中复制str的数据,每个数字用逗号分隔,所以我想在每个索引位置分别存储每个数字,然后我会对它进行排序。
我已经提前创建了我的排序程序并且它正常工作并将已排序的值发送回来查看。如何在我的数组中存储str的这些值?
这是我的控制器
public ActionResult Index( )
{
return View();
}
public ActionResult sorting (FormCollection formCollection)
{
int[] array = new int[5];
string str = formCollection["value"];
int temp;
int numLength = array.Length;
//sorting an array
for (int i = 1; i <= numLength - 1; i++)
{
for (int j = 0; j < numLength - 1; j++)
{
if (array[j + 1] < array[j])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
foreach (int num in array)
{
ViewData["data"] += num.ToString();
}
return View("Index");
}
这是我的观点
@{
ViewBag.Title = "Index";
}
@{
var i = ViewData["data"];
}
<script src="~/Scripts/jquery-1.10.2.min.js">
</script >
<script type="text/javascript">
var jsfunc = [];
var enteredNumbersWithCommaSeperator = '';
function AppendNumebrWithCommaDelimeter()
{
enteredNumbersWithCommaSeperator = enteredNumbersWithCommaSeperator + "," + $("#txtInputOfSort").val();
$("#txtInputOfSort").val("");
}
function formPost()
{
$.post("/home/sorting", { value: enteredNumbersWithCommaSeperator });
}
</script>
<form action="/" id="some" method="post">
<input type="text" name="txt" id="txtInputOfSort">
<input name="btn" type="button" value="Submit" onclick="AppendNumebrWithCommaDelimeter()" formaction="@Url.Action("Index", "Home")"><br />
<input type="button" name="btn" value="sort" onclick="formPost();" /> @* formaction = "@Url.Action("sorting","Home")" >*@
<br />
<h2>sorted array : @i</h2>
</form >
答案 0 :(得分:0)
假设每个号码都以str
变量中的逗号分隔,您可以使用String.Split
方法。
string str = "1,2,3,4" ; // Hard coded for demo
var strArray = str.Split(',');
现在strArray
将是一个string
数组,其中每个项目都是数值的字符串版本。每当您需要对值进行算术运算时,请读取该值,将其强制转换为int
(来自字符串)并使用它。
您可以使用Convert.ToInt32
和Int32.TryParse
方法等方法进行转化
您当前的UI代码对我来说有点混乱。您正在尝试使用数据执行ajax调用,返回您未使用的结果(视图?)!如果您使用的是AJAX方法,则只需返回已排序的数组(字符串版本)并更新DOM。 或执行普通表单提交(为此,您需要将逗号分隔值的字符串版本设置为输入字段,以便在httppost操作方法中可用。)
这是一个更简单的表单提交解决方案(没有ajax)
@using (Html.BeginForm())
{
<input type="text" id="txtInputOfSort">
<input type="hidden" name="commaSeperatedNumbers" id="commaSeperatedNumbers">
<input name="btn" type="button"
value="Submit" onclick="AppendNumebrWithCommaDelimeter()"/>
<input type="submit" name="btn" value="sort"/>
<br/>
<h2>sorted array : @i</h2>
}
和JavaScript创建逗号分隔的字符串并设置为隐藏字段。
function AppendNumebrWithCommaDelimeter() {
var r = '';
var v = $("#commaSeperatedNumbers").val();
if (v !== "") {
r = $("#commaSeperatedNumbers").val() + "," + $("#txtInputOfSort").val();
} else {
r = $("#txtInputOfSort").val();
}
$("#txtInputOfSort").val("");
$("#commaSeperatedNumbers").val(r);
}
现在在您的HttpPost操作方法中,
[HttpPost]
public ActionResult Index(string commaSeperatedNumbers)
{
var strArray = commaSeperatedNumbers.Split(',');
// Do your sorting here and update the commaSeperatedNumbers variable.
ViewData["data"] = commaSeperatedNumbers;
return View();
}
这是非ajax解决方案的简单工作版本。添加所需的空检查等以改进它。