C # Список объектов отображения и фильтра ввода Dotnet MVC - PullRequest
0 голосов
/ 19 октября 2019

Я пытался сделать это какое-то время, и мне очень нужна помощь. Я установил новую визуальную студию на моем Mac, а также dotnet mvc. Я создал простое приложение и не могу понять это вообще. Я новичок в точках чистой MVC, так что это часть проблемы. Я пока не разбираюсь в терминологии, но читал документы, чтобы попытаться выяснить это, но безрезультатно.

Вот мой контроллер:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using softwareversion.Models;

namespace softwareversion.Controllers
{
    public class SoftwareController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }

        public IActionResult Data()
        {
            return View("Index");
        }

    }
}

Вот мои модели:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace softwareversion.Models
{
    public class Software
    {
        public string Name { get; set; }
        public string Version { get; set; }
    }
}

Вот мои просмотры:

@model IEnumerable<softwareversion.Models.Software>
@{
    ViewData["Title"] = "Search Versions";
}
<div class="container">
    <div class="row">
        <div class="col-md-6">
            <h2>@ViewData["Title"]</h2>
        </div>
        <div class="col-md-6">
            <form method="get" action="" class="">
                <div class="input-group">
                    <input class="form-control" type="text" />
                </div>
            </form>
        </div>
    </div>
</div>


<table class="table">

    <tr>
        <td>
            {{List.Name}}
        </td>
        <td>
            {{List.Version}}
        </td>
    </tr>


</table>

Вот остаток кода, который мне прислали:

 public class Fake {
   public string Name {    get;  set;  }
   public string Version { get;  set;  }
 }

 public static class FakeManager {
  public static IEnumerable < Fake > GetAllFake() {
   return new List < Fake > {
    new Fake {
     Name = “Hello World”,
      Version = "13.2.1."
    },
    new Fake {
     Name = "Hello World",
      Version = "1.7.1"
    },
    new Fake {
     Name = "Hello World",
      Version = "8.1.13"
    },
    new Fake {
     Name = "Hello World",
      Version = "0.0.5"
    },
    new Fake {
     Name = "Hello World",
      Version = "2.6"
    },
    new Fake {
     Name = "Hello World",
      Version = "2017.0.1"
    },
    new Fake {
     Name = "Hello World",
      Version = "2019.1"
    },
    new Fake {
     Name = "Hello World",
      Version = "1.35"
    },
    new Fake {
     Name = "Hello World",
      Version = "0.7"
    }
   };
  }
 }

Остальные инструкции были мне отправленыОни попросили нас создать простой веб-сайт, на котором пользователи могут вводить номер версии и получать список программных продуктов, которые превышают введенную ими версию.

Версии программного обеспечения сохраняются в виде строки вформат [основная версия]. [дополнительная версия]. [патч]. Вы можете увидеть версии, такие как «2», «1.5» или «2.12.4» (это также допустимые входные данные пользователя). Период используется только в качестве разделителя и не представляет десятичную точку - 1,5 не означает полтора.

"2" == "2.0" == "2.0.0"
"2" < "2.0.1"
"2" < "2.1"
"2.0.1" < "2.1.0"

К счастью для вас, они сохранили список программного обеспечения как объект C # (предоставлен выше), который вы можете просто вставить в свой код - не нужно вызывать базу данных или службу REST.

ОБНОВЛЕНИЕ: я отредактировал свой контроллер, и теперь я получаю эту ошибку

My controller is now giving an error when I search:

Error

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using WebApplication2.Models;


namespace WebApplication2.Controllers
{
    public class SoftwareController : Controller
    {
        public IActionResult Index()
        {
            var softwares = SoftwareManager.GetAllSoftware();
            return View(softwares);
        }

        public IActionResult GetFilteredVersion(string filter = "")
        {
            var softwares = SoftwareManager.GetAllSoftware();
            char[] charsToTrim = { '.', ' ', '\'' };

            if (string.IsNullOrEmpty(filter))
                return View(softwares);

            var Result = softwares.Select(o => new { Version = Version.Parse(o.Version), original = o });

            if (filter == "")
                filter = "0.0.0";
            else
                filter = filter.Trim(charsToTrim).Replace(".", "0");

            var compareVersions = Version.Parse(filter);
            var greaterVersions = Result.Where(o => o.Version >= compareVersions);


            var filtered = Result.Where(a => a.Version > compareVersions).Select(o => o.original);
            return View(filtered);

        }

    }
}

1 Ответ

0 голосов
/ 23 октября 2019

Не могу комментировать из-за низкого числа повторов, поэтому вместо этого публикуется как ответ. Работа с кодом контроллера Роберта Макки для анализа строки поиска;Я думаю, что все, чего не хватало, это возвращать результаты обратно в View как ToList:

public IActionResult Index(string versionSearch)
    {
        if (versionSearch != null)
        {
            var model = FakeManager.GetAllFake();
            char[] trim = { '.', ' ', '\'' };
            versionSearch = versionSearch.Trim(trim);

            var compare = new Version(versionSearch);
            var result = model.Where(v => Version.Parse(v.Version.Trim(trim)) >= compare);

            return View(result.ToList());
        }
        else
        {
            var model = FakeManager.GetAllFake();
            return View(model.ToList());
        }
    }

Вот код представления, который я использовал, но он снова очень похож:

@model IEnumerable<[YourProjectNameHere].Models.Fake>
@{
    ViewData["Title"] = "Search Versions";
}
<div class="container">
    <div class="row">
        <div class="col-md-6">
            <h2>@ViewData["Title"]</h2>
        </div>
        <div class="col-md-6">
            <form method="get" action="" class="">
                <div class="input-group">
                    <input class="form-control" type="text" />
                </div>
            </form>
        </div>
    </div>
</div>
@using (Html.BeginForm())
{
    <p>
        Search by Version:
        @Html.TextBox("VersionSearch")
        <input type="submit" value="Search" />
    </p>
}

    <table class="table">
    <tr>
        <td>
            @foreach (var item in Model)
            {
                @item.Name
                <br />
            }
        </td>
        <td>
            @foreach (var item in Model)
            {
                @item.Version
                <br />
            }
        </td>
    </tr>
</table>

Когдафильтруя, теперь исключаются номера версий ниже, чем строка поиска, в том числе номера версий, которые выше (также проверены по второстепенным и патч-номерам): enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...