2

こんにちはすべて現在私は、読み込みの外観を作成してからこのactionresultを実行するボタンとJavaScriptを備えたWebサイトを持っています。actionresultにパラメーターを追加したいのですが、その方法がわかりません。ありがとう!これが私のコードコントローラーです:

    [HttpPost]
    public ActionResult PostMethod(string MyText)
    {
        System.Threading.Thread.Sleep(5000);

        return Json("And were done");
    }

意見:

<input type="text"  name="MyTextBlock"/>
<p id="PID">
Default message from declarative syntax.
</p>
<div id="divLoading" style="margin: 0px; padding: 0px; position: fixed; right: 0px;
top: 0px; width: 100%; height: 100%; background-color: #666666; z-index: 30001;
opacity: .8; filter: alpha(opacity=70);display:none" >
<p style="position: absolute; top: 30%; left: 45%; color: White;" align="center">
    <img src="../../Content/themes/base/images/ajax-loading.gif"><br />
    Loading, please wait...
</p>
</div>

<button onclick="JavascriptFunction();">HTTPPost Button</button>

<script type="text/javascript" language="javascript">
function JavascriptFunction() {
    var url = '@Url.Action("PostMethod", "MyTextBlock", new { MyText = "john" })';
    $("#divLoading").show();
    $.post(url, null,
            function (data) {
                $("#PID")[0].innerHTML = data;
                $("#divLoading").hide();
            });
}
</script>

私がやりたいのは、MyTextBoxをPostMethodに渡して、MyTextとして使用することです。私がテキストボックスから取得したい値のハードコードを見た他の例のいくつか。どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

3

Razorはページの読み込み前に生成されるため、ページの読み込み後にテキストボックスが必要な場合は、javascriptを使用する必要があります(つまり、エンドユーザーがの値を変更し、MyTextBoxAJAXを使用してこの新しい値を渡したい場合) 。

nullでデータ引数として渡す代わりに$.post、ここでの値を取得MyTextBoxしてアクションに渡します。例えば:

var url = '@Url.Action("PostMethod")';
var data = $('input[name="MyTextBox"]').serialize();
$.post(url, data, function(data){

});
于 2012-09-18T13:14:58.700 に答える
2

MVCがすでに処理しているものの多くを手作業でコーディングしようとしているようです。これを試してみてください...

まず、ビューのモデルを作成します。これは好きなように呼び出すことができます。ここに、アクションメソッドのパラメーターとして必要なプロパティを配置します。

YourModel.cs

public class YourModel
{
    public string MyText { get;set; }
}

コントローラの場合、2つの変更が必要になります。以下に示すように、ページのGETアクションには、モデルを渡す必要があります。

POSTアクションの場合は、string MyTextパラメーターをに変更しますYourModel model。これにより、MVCはビューの入力をモデルにバインドできるようになります。

アクション方法

public class YourController
{
    [HttpGet]
    public ActionResult PostMethod()
    {
        YourModel model = new YourModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult PostMethod(YourModel model)
    {
        //Do something with model.MyText;
        System.Threading.Thread.Sleep(5000);
        return Json("And We're Done");
    }
}

PostMethod.cshtml

//THIS LINE HERE IS THE MOST IMPORTANT
@model YourNamespace.YourModel
//Ajax will handle most of the calling and showing of your elements if you tell it what to do!
@using(Ajax.BeginForm(new AjaxOptions(){ LoadingElementId="divloading", OnSuccess="OnSuccessFunction" }))
{
    <input type="text"  name="MyText"/>
    //Quick note: If you decide to hand code your html, make sure your <input/> name attributes match the property names on your model object.
    //Or here you could do @Html.TextBoxFor(m => m.MyText)
    <p id="PID">
    Default message from declarative syntax.
    </p>
    <div id="divLoading" style="margin: 0px; padding: 0px; position: fixed; right: 0px;
    top: 0px; width: 100%; height: 100%; background-color: #666666; z-index: 30001;
    opacity: .8; filter: alpha(opacity=70);display:none" >
    <p style="position: absolute; top: 30%; left: 45%; color: White;" align="center">
        <img src="../../Content/themes/base/images/ajax-loading.gif"><br />
        Loading, please wait...
    </p>
    </div>

    <input type="submit" name="Submit" value="HTTPPost Button"/>

    <script type="text/javascript" language="javascript">
    function OnSuccessFunction(data, textStatus, jqXHR){
         $("#PID")[0].innerHtml = data;
     }
    </script>
}

この方法で行うことのいくつかの利点は、モデルにプロパティを追加してもJSを変更する必要がないことです。HtmlHelperを使用してビューに別の入力を追加するか、モデルのプロパティの名前と同じname属性を使用して入力名を手動でコーディングします。残りはMVCが処理します。

于 2012-09-18T13:31:57.847 に答える