0

I'm using C# asp.net mvc4 and trying to do ajax search. But ther is error and it says " The resource cannot be found.". What I'm doing wrong?

Controller

    //Search
    [HttpPost]
    public ActionResult ContractSearch(string Name)
    {
        var contracts = db.Contracts.Include(c => c.DocType).Include(c => c.CreditType).Include(c =>          c.Bank).Include(c => c.UserProfile).Where(c => c.FirstName.Equals(Name));
        return View(contracts.ToList());
    }

View

@model IEnumerable<CreditoriyaApp.Models.Contract>

@{
ViewBag.Title = "Index";
}

<div>
@using (Ajax.BeginForm("ContractSearch", "Contract", new AjaxOptions { UpdateTargetId = "searchresults" }))
{
<input type="text" name="Name" />
<input type="submit" value="Search" />
}

<div id="searchresults">
@if (Model != null && Model.Count()>0)
{
    <ul>
    @foreach (var item in Model)
    { 
        <li>@item.FirstName</li>
    }
    </ul>
}
</div>

Error

Server Error in '/' Application.

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed,   had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is  spelled correctly. 

Requested URL: /Contract/ContractSearch
tarakan
  • 1
  • 1
  • Does `Ajax.BeginForm` by default use a GET request instead of a POST request? Is the controller name correct? – David Jul 21 '13 at 01:34
  • Ajax.BeginForm use POST request, controller name is correct. – tarakan Jul 21 '13 at 01:40
  • Maybe [this](http://stackoverflow.com/questions/4476511/asp-net-mvc-ajax-beginform-is-not-submitting-via-ajax) is the same issue you're having. Cheers! – matty-d Jul 21 '13 at 01:40

1 Answers1

0

Add the below in your controller. Then your error will be corrected.

public ActionResult ContractSearch()
{
   return View();
}

for searching you can try something like below example.

Model:

public class Person
    {
        public string Name { get; set; }
        public string Country { get; set; }

    }

Controller:

public ActionResult SearchPerson()
        {

            return View();
        }

        [HttpPost]
        public ActionResult SearchPerson(string searchString)
        {
            System.Collections.Generic.List<Person> lst = new List<Person>();
            lst.Add(new Person { Name = "chamara", Country = "Sri Lanka" });
            lst.Add(new Person { Name = "Arun", Country = "India" });
            if (!string.IsNullOrEmpty(searchString))
            {
                lst = lst.AsEnumerable().Where(r => r.Name.Contains(searchString)).ToList();
            }
            string result = string.Empty;
            result = "<p>Search Result<p>";
            foreach (Person item in lst)
            {
                result = result + "<p> Names is: " + item.Name + " and Country is:" + item.Country + "<p>";
            }
            return Content(result, "text/html");
        }

View:

@model IEnumerable<Mvc4Test.Models.Person>

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>SearchPerson</title>
     <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
</head>
<body>

@using (Ajax.BeginForm("SearchPerson", "Search", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "searchresults" }))
{
 @Html.TextBox("searchString")
<input type="submit" value="Search" />
}    

<div id="searchresults">

</div>
</body>
</html>
chamara
  • 12,649
  • 32
  • 134
  • 210