Show result in same view after submit MVC

2019-03-16 22:09发布

I have a form with two fields which will pass values to a stored procedure. The stored procedure will return 0 or 1.

If 0 the user is not eligible to see the data. If 1, he is. Then I want to show the details in the same page which I have submitted. I am using MVC 4 razor.

Please give some idea how to achieve this. I am new to MVC.

3条回答
forever°为你锁心
2楼-- · 2019-03-16 22:12

You can use javascript ajax to post your from. using this you can get the data through ajax without refreshing the page and then you can use your ajax result to display the data.

HTML code

<form id="MyForm"  method="post">
<input type="text" name="value1"/>
<input type="text" name="value2"/>
<input type="submit" name="Submit" value="Submit" />
</form>

Controller code

public class HomeController : Controller
{
    [HttpPost]
    public ActionResult MyAction(MyViewModel model)
    {
        var result = ResultOfStoredPrcedure();
        return Content(result);
    }
}

javascript code

<script >

 $(document).ready(function () {

    $('#MyForm').submit(function (e) {

        var formData = new FormData(this);

        $.ajax({
            url: '@Url.Action("MyAction", "Home")',
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: formData,
            contentType: false,
            processData: false,
            success: function (result) {
             // here in result you will get your data
            },
            error: function (result) {

            }
        });
        e.preventDefault();
    });
});
</script>
查看更多
男人必须洒脱
3楼-- · 2019-03-16 22:13

If I understand you correctly you need to use Ajax.Beginform (or Ajax.Action). So, have a look on this answer I hope it will help you https://stackoverflow.com/a/5410121/2115584

查看更多
劳资没心,怎么记你
4楼-- · 2019-03-16 22:17

If you want you can utilise MVCs Ajax Helper, and use the Ajax.BeginForm(), or use javascript and a standard form to post. Whatever the choice, in your Action just return a View.

If you use the Ajax.BeginForm() you can specify an element by it's ID to update, and by returning a View you have greater control over what is returned in comparison to returning Content.

@using (Ajax.BeginForm("MyActionHome", "Home", new AjaxOptions {HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "resultArea"}))
{
    <input type="submit" name="Submit" value="Submit" /><
}

<div id="resultArea">
</div>   

This form allows you to specify the Action,Controller, Options and if you want additional arguments to send. We have also specified the TargetId that we want to update, in this case the 'resultArea'.

If you needed some clientside code to execute you could also use the OnComplete option and provide a JavaScript function.

[HttpPost]
public ActionResult PurchaseUnit()
{
    return View("_ResultPartial",);
}

Here we have a basic controller which returns a PartialView. That Partial will then be inserted into the Id specified, and will Replace, as defined by our options

查看更多
登录 后发表回答