4

助けが必要です。JavaScript と Knockout を使用して ASP.NET MVC4 を使用して小さなアプリを作成しましたが、javascript から MVC コントローラーに、またはその逆にデータを送信できません。たとえば、JS の部分は次のようになります。

JavaScript

self.Employer = ko.observable();
self.AboutEmployer = function (id) {
            $.ajax({                    
                    Url.Action("GetEmployer", "Home")
                    cache: false,
                    type: 'GET',
                    data: "{id:" + id + "}",
                    contentType: 'application/json; charset=utf-8',
                    dataType: "json",
                    success: function (data) {
                        self.Employer(data);
                    }
                }).fail(
                function () {
                    alert("Fail");
                });
         };

ASP.NET MVC ホーム コントローラーでは、ID で雇用主を取得し、Json として返します。

C#

public JsonResult GetEmployer(int id)
    {
        var employer = unit.Repository<Employer>().GetByID(id);
        return Json(employer, JsonRequestBehavior.AllowGet);
    }

My View は別の Controller (Home/KnockOutView) を返します。私のビューも別のオブジェクトを取得し、受信したものに応じて、外観が異なります。

HTML

...
<b>About Company: </b><a href="#" data-bind="click: $root.AboutEmployer.bind($data, Vacancy().EmployerID)">
<span data-bind="    text: Vacancy().Employer"></span></a>
<div data-bind="if: Vacancy">
    <div id="VacancyDescription"><span data-bind="text:DescriptionShort"></span>
    </div>
</div>
<div data-bind="if: Employer">
    <div data-bind="text: Employer().EmployerDescription"></div>
</div>

すべてがうまく機能し、JS で Vacancy および Employer オブジェクトを受け取り、Knockout を使用して HTML で表示しますが、私の URL は常に同じです!!! しかし、Vacancy または Employer を取得したときに、常に URL を変更したいと考えています。 たとえば、メソッド GetEmployer を使用して Employer を取得する場合、URL は次のようになります。 ~/Home/GetEmployer?id=3 URL のコードのこの文字列を変更 すると、変更さUrl.Action("GetEmployer", "Home")url: window.location.href = "/home/GetEmployer?id=" + idますが、Controller は Json オブジェクトを返し、 Json形式でウィンドウに表示します。URL を変更し、URL から Controller の情報を取得するのを手伝ってください。ありがとう。

4

5 に答える 5

4

以下のコードを試してください。

このコードは %100 で動作します。シナリオに応じてテキストボックスの下を変更してください

HTML

<input type="text" id="UserName" name="UserName" />
<input type="button" onclick="MyFunction()"value="Send" />

<div id="UpdateDiv"></div> 

Javascript:

function MyFunction() {
    var data= {
        UserName: $('#UserName').val(),
    };
    $.ajax({
        url: "/Home/GetEmployer",
        type: "POST",
        dataType: "json",  
        data: JSON.stringify(data),
        success: function (mydata) {
            $("#UpdateDiv").html(mydata);
            history.pushState('', 'New URL: '+href, href); // This Code lets you to change url howyouwant
        });
        return false;
    }
}

コントローラ:

public JsonResult GetEmployer(string UserName)
{
    var employer = unit.Repository<Employer>().GetByID(id);
    return Json(employer, JsonRequestBehavior.AllowGet);
}
于 2013-09-23T17:54:09.197 に答える
2

これが私のコントローラーアクションです。

[HttpPost]
    public ActionResult ActionName(string x, string y)
    {
        //do whatever
        //return sth :)

    }

私の投稿アクションはここにあります。

<script type="text/javascript">
        function BayiyeCariEkle(){

           var sth= $(#itemID).text();

           var sth2= $(#itemID2).text();

           $.post("/ControllerName/ActionName", { x: sth, y: sth2});

         }
</script>
于 2014-03-14T07:42:10.550 に答える
1

このようなデータパラメータを使用します{id:id, otherPara:otherParaValue}

 $.ajax({                    
     url:Url.Action("GetEmployer", "Home")
     type: 'GET',
     data: {id:id},
     contentType: 'application/json; charset=utf-8',
     dataType: "json",
     success: function (data) {
         alert(data)
     }
 });
于 2013-09-23T17:48:41.390 に答える
0

MVC は同じビューへのルートの処理に少し煩わしいため、これを行うことに成功しました。

self.Employer = ko.observable();
self.AboutEmployer = function (id) {
            $.ajax({                    
                    url: "@Url.Action("GetEmployer", "Home", new { id = "PLACEHOLDER"})".replace("PLACEHOLDER", id),
                    cache: false,
                    type: 'GET',
                    contentType: 'application/json; charset=utf-8',
                    dataType: "json",
                    success: function (data) {
                        self.Employer(data);
                    }
                }).fail(
                function () {
                    alert("Fail");
                });
         };

standard を使用できますurl: "@Url.Action("GetEmployer", "Home")/" + idが、更新時に、既存の ID を持つルートが後続の呼び出しに残るため、ID の追加が開始されますが、これは明らかに機能しません。呼び出しで ID を指定することにより、その動作はなくなります。

于 2013-09-23T17:47:25.993 に答える