Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过ajax在mvc中使用ApicController创建wallpostfunction_C#_Asp.net_Asp.net Mvc_Asp.net Ajax - Fatal编程技术网

C# 通过ajax在mvc中使用ApicController创建wallpostfunction

C# 通过ajax在mvc中使用ApicController创建wallpostfunction,c#,asp.net,asp.net-mvc,asp.net-ajax,C#,Asp.net,Asp.net Mvc,Asp.net Ajax,我正在尝试使用ApicController和ajax在mvc中的用户页面上显示墙贴。我遇到的问题是,我视图中的函数不传递或接收数据,我不知道为什么 这是我的控制器: using Microsoft.AspNet.Identity; using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using webDate.Models; namespace webDate.Co

我正在尝试使用ApicController和ajax在mvc中的用户页面上显示墙贴。我遇到的问题是,我视图中的函数不传递或接收数据,我不知道为什么

这是我的控制器:

using Microsoft.AspNet.Identity;
using System;
using System.Collections.Generic;
using System.Linq;

using System.Web.Http;
using webDate.Models;

namespace webDate.Controllers
{
    [RoutePrefix("api/wallpost")]
    public class PostApiController : ApiController
    {
        [HttpGet]
        [Route("Get")]
        public PostModel[] ListPosts(string Id)
        {
            var db = new ApplicationDbContext();
            return db.posts.Where(p => p.PostReceiver.Equals(Id)).ToArray();
        }

        [HttpPost]
        [Route("Post")]
        public void Post(PostIndexViewModel postIndex)
        {
            var db = new ApplicationDbContext();
            var poster = db.Users.FirstOrDefault(u => u.Id.Equals(User.Identity.GetUserId()));
            var receiver = db.Users.FirstOrDefault(u => u.Id.Equals(postIndex.PostReceiver));

            var post = new PostModel
            {
                PostContent = postIndex.PostContent,
                Poster = poster.Id,
                PostReceiver = receiver.Id
            };
            db.posts.Add(post);
            db.SaveChanges();

        }


    }
}
这是我的观点:

@model webDate.Models.ProfileViewModel
@{
    ViewBag.Title = "User Profile";
}



<div class="row" style="margin-top:5rem">

    <div class="col-md-12">
        <div class="card">
            <div class="row">
                <img src="@Url.Action("UserAllPhotos", "Home", new { Id = Model.Id })" class="card-img" style="width:9rem ; margin-left: 1rem ; height:9rem" alt="User Photo">
                <div class="card-body">
                    <h3 class="card-title">@Model.Username</h3>
                    <h4 class="card-title">Age: @Model.Age</h4>
                    <p class=" card-text"> @Model.Description</p>
                </div>
            </div>
        </div>
    </div>

</div>
<div class="row" style=" margin-top : 3rem ;">
    <div class="col-md-12">
        <div class="card">
            <div class="card-body">
                <div>
                    <h3 class="card-header bg-transparent border-bottom">
                        Wall of posts
                    </h3>
                    <p class="card-text"> All them posts </p>
                    <p class="card-text"> All them posts </p>
                    <p class="card-text"> All them posts </p>
                </div>
            </div>

        </div>

    </div>
</div>
@section scripts {
    <script>
    $(document).ready(function () {
        function update() {
            $('#wall-output').text('');
                $.ajax({
                    url: "/api/wallpost/get",
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    data: { Id: @Html.Raw(Json.Encode(Model.Id))},
                    dataType: "json",
                    success: function (posts) {
                        posts.forEach(function (post) {
                            var tr = $('<tr></tr>');
                            tr.append(
                            '<div class="row">' +
                                '<div class="col-sm-6 col-md-4">' +
                                    '<div class="thumbnail">' +
                                    //'<img src= class="card-img" style="width:9rem ; margin-left: 1rem ; height:9rem" alt="User Photo">' +
                                            '<div class="caption">' +
                                                '<h3>' + 'From: ' + postModel.Poster + ' </h3>' +
                                                '<p class="message">' + postModel.PostContent + '</p>' +
                                            '</div>' +
                                    '</div>' +
                                '</div>' +
                            '</div>');
                            $('#wall-output').append(tr);
                        });
                    },
                    error: function () {
                        alert("Error please try again");
                    }
                });

        }


        $("#myButton").click(function () {
            var PostViewModel = new Object();
            PostViewModel.PostContent = $("#message").val().trim();
            PostViewModel.UserWall = @Html.Raw(Json.Encode(Model.Id));
            $.ajax({
                url: '/api/wallpost/post',
                type: 'POST',
                dataType: 'json',
                data: PostViewModel,
                success: function (d) {
                    document.getElementById("postform").reset();
                    update();
                },
                error: function () {
                    alert("Error please try again");
                }
            });
        });
        update();
    });
    </script>
    }
<div class="jumbotron">
    <h1>Wall</h1>
    <table style="width: 100%;">
        <tbody id="wall-output"></tbody>
    </table>
</div>
<div class="container">
    <form name="postform" id="postform" class="form-horizontal">
        <div class="form-group">
            <label for="PostContent">Wall Post:</label>
            <textarea class="form-control" rows="5" id="message"></textarea>
        </div>
        <input type="button" id="myButton" value="Create" />
    </form>
</div>
还有我的另一个模型:

    namespace webDate.Models
{
    public class PostViewModel
    {
        public string Poster { get; set; }
        public string PostReceiver { get; set; }

        [AllowHtml]
        [DataType(DataType.MultilineText)]
        [Display(Name = "Wall Post")]
        public string PostContent { get; set; }
    }
}

在ajax函数中,它直接出错,我不知道它为什么会出错。

在ajax调用中不需要/get/:

url:“/api/wallpost/get”

这应该很好:


url:“/api/wallpost/”
在ajax调用中不需要/get/:

url:“/api/wallpost/get”

这应该很好:


url:“/api/wallpost/”

您为ajax请求指定了错误的url好的,所以如果我理解正确,我需要更改的是url:“/api/wallpost/post?”?我不确定url应该要求什么,你能帮我一下吗?谢谢。您为ajax请求指定了错误的url。好吧,如果我理解正确,那么我需要更改的是url:“/api/wallpost/post?”?我不确定url应该要求什么,你能帮我一下吗?谢谢。好吧,我试着改变了,但还是有错误。据我所知,这与功能(post)不成功有关。但我不确定那个调用中出现了什么错误。所以我根据您的回答进行了更改,这非常有帮助,但在调用该方法时仍然会产生错误。好的,所以我尝试了更改,但仍然会出现错误。据我所知,这与功能(post)不成功有关。但我不确定调用中出现了什么错误,所以我根据您的回答进行了更改,这非常有用,但调用该方法时仍会产生错误。
    namespace webDate.Models
{
    public class PostViewModel
    {
        public string Poster { get; set; }
        public string PostReceiver { get; set; }

        [AllowHtml]
        [DataType(DataType.MultilineText)]
        [Display(Name = "Wall Post")]
        public string PostContent { get; set; }
    }
}