2017-02-11 36 views
-3

我正在使用MVC方法对数组进行排序。我有一个名为“数组”的数组,我必须在运行时存储一些值。在视图中,我给出了一个文本框和一个按钮,用户将输入一些整数值,然后在每个值之后单击按钮,这将调用JavaScript函数,并将值存储在其中并用逗号附加它。将字符串obj存储到数组中

然后我调用另一个函数,它将数据发送到控制器并将该值存储在名为“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

假设每个号码与在str可变逗号隔开,则可以使用String.Split方法。

string str = "1,2,3,4" ; // Hard coded for demo 
var strArray = str.Split(','); 

现在strArray将是一个string数组,其中每个产品的数字值的字符串版本。无论何时需要对该值进行算术运算,读取该值,将其转换为int(从字符串)并使用它。

您可以使用方法如Convert.ToInt32Int32.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解决方案的简单的工作版本。添加所需的空检查等来改进它。

+0

感谢您的帮助,但我仍然混淆了如何存储拆分的值可以给你完整的演示请 –

+0

我很抱歉,这个麻烦,但你能写一个代码示例,以便我可以看看,并按照我的程序中有相同的步骤,因为我得到的错误 –

+0

噢,我很抱歉,结果的事情我wasw尝试别的东西,请忽略该部分,我回到我的观点索引,以便数据可以到我需要的位置,我的观点是 –

相关问题