J'ai un champ de recherche de base dans lequel je veux afficher des données lorsque l'utilisateur appuie sur la touche "submit" ou "enter". La division s'affiche lorsqu'on clique dessus, mais les données reviennent nulles, même si je peux parcourir mon code d'accès aux données et voir que les données sont ajoutées à une liste. Quelqu'un peut-il m'aider à résoudre ce problème ?
J'ai essayé plusieurs choses pour que cela fonctionne. Je pense que mon problème se situe au niveau du Homecontroller et de la façon dont la vue est affichée.
SearchViewModel.cs
public class SearchViewModel
{
[DisplayName("Search Query *")]
[Required]
public string Query { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
DataAccess.cs
public static bool GetSearchData(string searchString, out List<SearchViewModel> lstModel)
{
lstModel = new List<SearchViewModel>();
try
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlCommand command = connection.CreateCommand();
command.CommandType = System.Data.CommandType.Text;
command.CommandText = "select Subject, Body from TABLE where Subject = @subject ";
command.Parameters.AddWithValue("@subject", searchString);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
SearchViewModel model = new SearchViewModel();
model.Subject = reader.GetValue(0).ToString();
model.Body = reader.GetValue(1).ToString();
lstModel.Add(model);
}
connection.Close();
return true;
}
catch (Exception exc)
{
exc.ToString();
return false;
}
}
HomeController.cs
List<SearchViewModel> lstModel = new List<SearchViewModel>();
public ActionResult Index(SearchViewModel model)
{
if (!ModelState.IsValid)
{
// There was a validation error => redisplay the view so
// that the user can fix it
return View(model);
}
else
{
string searchString = model.Query;
DataAccess.GetSearchData(searchString, out lstModel);
return View(model);
}
}
Index.cs (Vue d'accueil)
@using (Html.BeginForm())
{
@Html.LabelFor(x => Model.Query)
@Html.EditorFor(x => x.Query)
@Html.ValidationMessageFor(x => x.Query)
<button type="submit">Search</button>
}
@if (Model.Query != null)
{
<div class="results-panel" style="display:block;" )">
<h4 class="card-title">@Model.Subject</h4>
@Model.Body
</div>
}
La chaîne de recherche est transmise à la fonction DataAccess qui remplit l'objet avec les données, mais l'objet s'affiche comme nul lorsque je le débogue dans la vue Home Index. Quelqu'un peut-il m'aider ? Je crois que je suis très près du but.