Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Display Success message on the same page when submit

I'm using Html.Beginform in view page and get the parameters using FormCollection to the controller i want to return the Success message on the same ViewPage as a result.i'm using following code,

public string InsertDetails(FormCollection collection)
{     
     string result = "Record Inserted Successfully!";
     return result; 
}

It shows the success message on the new page.How can i resolve this? what i have to return to get the Success message on the same page?

like image 214
user2514925 Avatar asked Jul 11 '13 09:07

user2514925


People also ask

How to show success message in php on same page?

php if ($_SERVER["REQUEST_METHOD"] == "POST") {} $name = trim($_POST["username"]); $phone = trim($_POST["phone"]); $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL); $message = trim($_POST["message"]); if(isset($_POST['g-recaptcha-response'])){ $captcha = $_POST['g-recaptcha-response']; } //Validate the ...


2 Answers

Personally, I'd pop the result string into the ViewBag.

public ActionResult InsertDetails(FormCollection collection)
{
         //DO LOGIC TO INSERT DETAILS
         ViewBag.result = "Record Inserted Successfully!";
         return View(); 
}

Then on the web page:

<p>@ViewBag.result</p>
like image 169
doreye01 Avatar answered Oct 04 '22 23:10

doreye01


I have following Options.

1. Use Ajax Begin Form with AjaxOptions like below

@using (Ajax.BeginForm("ActionName", "ControllerName", new { area = "AreaName" }, new
    AjaxOptions
    {
        HttpMethod = "POST",
        OnSuccess = "alert('Success');" //This will execute once the Ajax call is finished.

    }, null))
{
    <input type="submit" name="nameSubmit" value="Submit" />
}

2. Use JQuery to Manually Setup the XHR Request

$.ajax({
    url: "@Url.Action("ActionName", "ControllerName", new { area = "AreaName" });",
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({param : Value})
})
.done(function () { alert('Success');}) //This will execute when you request is completed.
.fail(function () { })

My Suggestions

There are following disadvantages while using the FormCollection

Point - 1

In case FormCollection is being used...It will be mandatory to Type Cast the Primitive Type Values un-necessarily because while getting the entry of specific Index of the System.Collections.Specialized.NameValueCollection, value being returned is of type String. This situation will not come in case of Strongly Typed View-Models.

Issue - 2

When you submit the form and goes to Post Action Method, and View-Model as Parameter exists in the Action method, you have the provision to send back the Posted Values to you View. Otherwise, write the code again to send back via TempData/ViewData/ViewBag

enter image description here



Point - 3

We have Data Annotations that can be implemented in View Model or Custom Validations.

enter image description here

ASP.Net MVC simplifies model validatons using Data Annotation. Data Annotations are attributes thyat are applied over properties. We can create custom validation Attribute by inheriting the built-in Validation Attribute class.



Point - 4

Example you have the following HTML

<input type="text" name="textBox1" value="harsha" customAttr1 = "MyValue" />

Question : How can we access the value of customAttr1 from the above eg from inside the controller

Answer : When a form get posted only the name and value of elements are posted back to the server. You can also use Hidden Fields to post the Attributes to Post Action method.

Alternatives : Use a bit of jQuery to get the custom attribute values, and post that along with the form values to action method

Another option is to rather put what you got in your custom attributes in hidden controls




That's the reason, I would always prefer to use View-Models

like image 28
SCV Avatar answered Oct 04 '22 22:10

SCV