0

I have a web application that upload csv file and display the details rows.

In the first view i create a table and I need choose a few rows then in the action controller I do some staff and return to the second view and there I create a table with the chosen rows from the first view.

Now if I choose in the first view the rows 1, 3, 5 I get in the second view the rows 1, 2, 3 or in the first view i choose 4, 6 in the second view I get 1, 2.

public class DetailsExcelFile
{        
    public int NumberClient { get; set; }        
    public string NameClient { get; set; }
    public int Amount { get; set; }
    public string Email { get; set; }
    public string ContactPerson { get; set; }
    public bool IsSelectedRow { get; set; }
    public bool NeedEmail { get; set; }
}

The ViewModelForExcel class always with the latest list.

public class ViewModelForExcel
{
    public List<DetailsExcelFile> DetailsExcelFileList { get; set; }
    public DetailsExcelFile ObjectDetailsExcelFile { get; } = new DetailsExcelFile();
    public ViewModelForExcel()
    {

    }
}

The vies: first:

@model SendLinks.ViewModels.ViewModelForExcel
@{
    ViewBag.Title = "FileDetails";
    Layout = "~/Views/Shared/_Layout.cshtml";
}



@using (Html.BeginForm("ChooseItems", "Home", FormMethod.Post))
{

    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    if (@ViewBag.Message != null)
    {
        <div style="border: 1px solid red">
            @ViewBag.Message
        </div>
    }

    <table id="DetailsExcelChoose" class="table-responsive text-right">
        <thead>
            <tr>
                <th><input type="checkbox" id="checkAll" /></th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.IndexRow, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.InvoiceNumber, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.NumberClient, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.NameClient, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.Amount, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.ContactPerson, new { @readonly = "readonly" })</th>
            </tr>
        </thead>
        <tbody>
            @for (var i = 0; i < Model.DetailsExcelFileList.Count(); i++)
            {
                <tr>
                    <td>@Html.CheckBoxFor(a => a.DetailsExcelFileList[i].IsSelectedRow, true)</td>
                    <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].IndexRow, new { @class = "wideIndexRow" })</td>
                    <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].InvoiceNumber)</td>
                    <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].NumberClient, new { @class = "wideIndexRow" })</td>
                    <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].NameClient)</td>
                    <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].Amount, new { @class = "wideIndexRow" })</td>
                    <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].ContactPerson)</td>
                </tr>
            }
        </tbody>
        <tr>
            <td></td>
            <td>
                <input type="submit" value="choose" />
            </td>
            <td></td>
        </tr>
    </table>
}

The action in the controller:

        [HttpPost]
        [ValidateAntiForgeryToken]
        [Route("ChooseItems")]
        public async Task<ActionResult> ChooseItemsAsync(ViewModelForExcel i_Obj)
        {
            if (ModelState.IsValid)
            {
               //do some staff....
               return View("~/Views/Home/UpdateFileDetails.cshtml", new ViewModelForExcel() { DetailsExcelFileList = manipulateFile.GetDetailsExcelFileListToUpdate() });// manipulateFile is object that have the list from i_Obj after it doing something :)
            }

            return HttpNotFound();
        }

The second view:(UpdateFileDetails.cshtml)

@model SendLinks.ViewModels.ViewModelForExcel
@{
    ViewBag.Title = "UpdateFileDetails";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@using (Html.BeginForm("UpdateItems", "Home", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    if (@ViewBag.Message != null)
    {
        <div style="border: 1px solid red">
            @ViewBag.Message
        </div>
    }

    <table id="DetailsExcelChoose">
        <thead>
            <tr>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.IndexRow, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.InvoiceNumber, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.NumberClient, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.NameClient, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.Amount, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.Email, new { @readonly = "readonly" })</th>
                <th class="RightToLeft">@Html.LabelFor(a => a.ObjectDetailsExcelFile.ContactPerson, new { @readonly = "readonly" })</th>
            </tr>
        </thead>
        <tbody>
            @for (var i = 0; i < Model.DetailsExcelFileList.Count(); i++)
            {
                    <tr>
                        <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].IndexRow, new { @class = "wideIndexRow" })</td>
                        <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].InvoiceNumber)</td>
                        <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].NumberClient, new { @class = "wideIndexRow" })</td>
                        <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].NameClient)</td>
                        <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].Amount, new { @class = "wideIndexRow" })</td>
                        <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].Email, new { required = "required" })</td>
                        <td>@Html.TextBoxFor(a => a.DetailsExcelFileList[i].ContactPerson)</td>
                    </tr>

            }
        </tbody>
        <tr>
            <td>
                <input type="submit" value="Update" />
            </td>
            <td></td>
            <td></td>
        </tr>
    </table>

}

I try to debugging all the actions that I do in the controller and everything work fine. just the view make problems.

Update the question

tal
  • 295
  • 1
  • 4
  • 20
  • @StephenMuecke for the third commend you right I forgot to delete the readonly. for fifth commend you also right. – tal Feb 21 '18 at 06:57
  • @StephenMuecke the 1st view go to ChooseItems action in the controller do some staff and return to the second view - return View("2ndView", model); – tal Feb 21 '18 at 07:00
  • I will edit.. but your solution work. you can explain why? – tal Feb 21 '18 at 07:03

0 Answers0