Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net mvc &引用;控制器,动作,模型;并非所有代码路径都返回值_Asp.net Mvc_Controller_Http Post - Fatal编程技术网

Asp.net mvc &引用;控制器,动作,模型;并非所有代码路径都返回值

Asp.net mvc &引用;控制器,动作,模型;并非所有代码路径都返回值,asp.net-mvc,controller,http-post,Asp.net Mvc,Controller,Http Post,我对action PostResponse上的错误“并非所有代码路径都返回值”感到困惑。我盯着我的模型、控制器和视图看了好几个小时,我想我已经把所有的路径都覆盖了。当然项目不会生成,所以我无法进一步调试 我的行动 // POST: /Questions/ViewQuestion/5 [HttpPost] [ValidateAntiForgeryToken] public ActionResult PostResponse([Bind(Include = "

我对action PostResponse上的错误“并非所有代码路径都返回值”感到困惑。我盯着我的模型、控制器和视图看了好几个小时,我想我已经把所有的路径都覆盖了。当然项目不会生成,所以我无法进一步调试

我的行动

    // POST: /Questions/ViewQuestion/5
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult PostResponse([Bind(Include = "UserId,QuestionID,Answer,Source,Status,DateStamp")] Response response)
    {
        if (ModelState.IsValid)
        {
            db.Responses.Add(response);
            db.SaveChanges();
        }
    }
我的看法

@model Template.Models.Question
@using Microsoft.AspNet.Identity
@{
   ViewBag.Title = "View question";
    var qtype = Model.QuestionTypeId;
    ViewBag.Number = Model.Id - 7;
    
}
@using (Html.BeginForm("Question", "ViewQuestion", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
<div>
    <h4>Question #@ViewBag.Number</h4>
    <hr />
    <h1> @Model.Question1</h1>
</div>

<div class="form-group">
    @switch (qtype)
    {
        case 1:
        // Textbox
            @Html.TextArea("Answer", new { @class = "form-control", rows = "4", col = "5" });
            break;
        case 2:
        //      Dropdown
        <select class="form-control" id="Answer">
            @foreach (var item in Model.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
            {
                <option value="@item.QuestionOption1">@item.QuestionOption1</option>

            }
        </select>
            break;
        case 3:
        //     Checkbox
        <div class="checkbox">
                    @foreach (var item in Model.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
{
    <input type="checkbox" name="Answer" value="@item.QuestionOption1" />  @item.QuestionOption1 <br />
                    }
        </div>
        break;

        case 4:
        //      Radio buttons
        foreach (var item in Model.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
            {
                <div class="radio">
                    <label>
                        <input type="radio" name="Answer" value="@item.QuestionOption1" />
                        @item.QuestionOption1
                    </label>
                </div>
            }

            break;
    }

</div>
@using Template.Models.Response
@Html.HiddenFor(r => r.Responses, new { UserId = User.Identity.GetUserId(), Source = "Web", Status = "New", DateStamp = System.DateTime.Now })
<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="submit" class="btn btn-default" value="Answer" />
    </div>
</div>
<br />
<hr />
<p>

    @Html.ActionLink("Previous", "ViewQuestion", new { id = Model.Id - 1 }) |
    @Html.ActionLink("Next", "ViewQuestion", new { id = Model.Id + 1 })
</p>
@model Template.Models.Question
@使用Microsoft.AspNet.Identity
@{
ViewBag.Title=“查看问题”;
var qtype=Model.QuestionTypeId;
ViewBag.Number=Model.Id-7;
}
@使用(Html.BeginForm(“问题”,“视图问题”,FormMethod.Post,新的{@class=“form horizontal”,role=“form”}))
问题#@ViewBag.Number

@模型.问题1 @开关(qtype) { 案例1: //文本框 @TextArea(“Answer”,new{@class=“formcontrol”,rows=“4”,col=“5”}); 打破 案例2: //下拉列表 @foreach(Model.QuestionOptions.OrderBy中的var项(o=>o.QuestionOptionRanking)) { @项目1.问题选项1 } 打破 案例3: //复选框 @foreach(Model.QuestionOptions.OrderBy中的var项(o=>o.QuestionOptionRanking)) { @item.QuestionOption1
} 打破 案例4: //单选按钮 foreach(Model.QuestionOptions.OrderBy中的var项(o=>o.QuestionOptionRanking)) { @项目1.问题选项1 } 打破 } @使用Template.Models.Response @Html.HiddenFor(r=>r.Responses,new{UserId=User.Identity.GetUserId(),Source=“Web”,Status=“new”,DateStamp=System.DateTime.Now})

@ActionLink(“上一个”,“视图问题”,新的{id=Model.id-1}”)| @ActionLink(“下一步”,“视图问题”,新的{id=Model.id+1})


页面显示得非常完美,但我无法测试post操作,因为我无法使用当前错误进行生成。

您的PostResponse操作或方法将ActionResult指定为返回类型,但实际上不返回任何内容。您可以通过将其从ActionResult更改为void来解决此问题

   [HttpPost]
[ValidateAntiForgeryToken]
public ActionResult PostResponse([Bind(Include = "UserId,QuestionID,Answer,Source,Status,DateStamp")] Response response)
{
    if (ModelState.IsValid)
    {
        db.Responses.Add(response);
        db.SaveChanges();
    }
    else{
        return View("Error");
    }

}

解决了,;但这几乎是从头开始的,因为我创建了一个新的ViewModel并使用它来填充响应

        [HttpPost]
    public ActionResult ViewQuestion([Bind(Include = "QuestionId, Answer, UserId")] ResponseViewModel responseViewModel)
    {

        Response re = new Models.Response();
            re.Answer = responseViewModel.Answer;
            re.UserId = responseViewModel.UserId;
            re.QuestionId = responseViewModel.QuestionId;
            re.DateStamp = System.DateTime.Now;
            db.Responses.Add(re);
            db.SaveChanges();

        return RedirectToAction("ViewQuestion");
    }

谢谢你的意见,因为你的评论让老头儿又开始工作了。谢谢

已尝试此操作,但未填充数据库。此外,在发布后,它不会自动返回到同一屏幕,事实上,它会完全中断。所以我试着加上;返回重定向到操作(“/ViewQuestion/”+(response.QuestionId+1));我把ActionResult放回了void,但现在我又犯了同样的错误??嗯,你现在有几个不同的要求。我无法解释为什么您的项目没有保存在数据库中。可能您的ModelState无效,并且它从未执行过此块。如果您想返回到“相同”屏幕,则需要返回视图(响应)。这将使您返回该操作的视图,通过传递模型,您的视图可以重新绑定到该视图。