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
C# mvc中的“我的视图”将不同的值返回给post操作_C#_Asp.net Mvc_Asp.net Mvc 4_Input_View - Fatal编程技术网

C# mvc中的“我的视图”将不同的值返回给post操作

C# mvc中的“我的视图”将不同的值返回给post操作,c#,asp.net-mvc,asp.net-mvc-4,input,view,C#,Asp.net Mvc,Asp.net Mvc 4,Input,View,我有一个模型,你可以在这里看到: public partial class AssistanceJuror { public int Id { get; set; } public System.DateTime Date { get; set; } public int UserId { get; set; } public int AssistanceId { get; set; } public virtual User User { get; s

我有一个模型,你可以在这里看到:

public partial class AssistanceJuror
{
    public int Id { get; set; }
    public System.DateTime Date { get; set; }
    public int UserId { get; set; }
    public int AssistanceId { get; set; }

    public virtual User User { get; set; }
    public virtual Assistance Assistance { get; set; }
}
我的控制器中有一个操作返回我的
edit
视图

   @model DomainClass.AssistanceJuror

@{
    ViewBag.Title = "View1";
    Layout = "~/Views/Shared/_LayoutIdeaOtherPage.cshtml";
}

<h2>View1</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>AssistanceJuror</legend>

        @Html.HiddenFor(model => model.Id)


        <div class="editor-label">
            @Html.LabelFor(model => model.Date)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Date)
            @Html.ValidationMessageFor(model => model.Date)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.UserId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserId)
            @Html.ValidationMessageFor(model => model.UserId)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.AssistanceId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.AssistanceId)
            @Html.ValidationMessageFor(model => model.AssistanceId)
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
我的职位

    [HttpPost]
        [Authorize(Roles = "Admin,Expert")]
        public ActionResult EditExpert(AssistanceJuror assistanceJuror)
        {

        }
让我们解释一下我在
edit
操作中的问题,我用
id=5
将一个
AssistanceJuror
返回到我的视图,但正如你所看到的,我在
@Html.HiddenFor(model=>model.id)
中保留了
AssistanceJuror.id
,但是在点击提交按钮后,视图返回的id变为
4

致意

我改变这一点:

@Html.HiddenFor(model => model.Id)
为此:

<div class="editor-label">
        @Html.LabelFor(model => model.Id)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Id)
        @Html.ValidationMessageFor(model => model.Id)
    </div>

我终于发现了问题。问题是参数的名称:

在get方法中,我获得了一个id,您可以在这里看到:

public ActionResult EditExpert(int id)
    {
        ViewBag.listAssistance = new SelectList(objAssistanceRepository.ReturnAssitanceWithoutExpert(), "Id",
                                                "AssistanceName");
        AssistanceJuror t = new AssistanceJuror();

        if (objAssistanceJurorRepository.FindBy(i => i.UserId == id).Count() == 1)
        {
            t = objAssistanceJurorRepository.FindBy(i => i.UserId == id).First();
        }
        return View(t);
    }
因此,当id传递给此操作时,mvc会尝试将这些值与您的模型匹配,问题是mvc会尝试将id放入您的模型的id中,但事实上,我得到的这个值是将参数名称更改为userid后的用户id问题解决了:

public ActionResult EditExpert(int userid)
{
    ViewBag.listAssistance = new SelectList(objAssistanceRepository.ReturnAssitanceWithoutExpert(), "Id",
                                            "AssistanceName");
    AssistanceJuror t = new AssistanceJuror();

    if (objAssistanceJurorRepository.FindBy(i => i.UserId == userid).Count() == 1)
    {
        t = objAssistanceJurorRepository.FindBy(i => i.UserId == userid).First();
    }
    return View(t);
}

与其用这种方式获取id,不如在控制器操作中使用model.id,请您详细解释一下\第一个操作是[Httpget],第二个操作是[HttpPost]…在上面的问题中正确???是的,你是对的,但我不知道如何通过模型传递值。如果可能,我需要更多详细信息。你的post controller操作中有Assistance Juror对象。你的id将自动绑定到表单提交上的Assistance Juror对象。只需在那里应用断点并检查
public ActionResult EditExpert(int id)
    {
        ViewBag.listAssistance = new SelectList(objAssistanceRepository.ReturnAssitanceWithoutExpert(), "Id",
                                                "AssistanceName");
        AssistanceJuror t = new AssistanceJuror();

        if (objAssistanceJurorRepository.FindBy(i => i.UserId == id).Count() == 1)
        {
            t = objAssistanceJurorRepository.FindBy(i => i.UserId == id).First();
        }
        return View(t);
    }
public ActionResult EditExpert(int userid)
{
    ViewBag.listAssistance = new SelectList(objAssistanceRepository.ReturnAssitanceWithoutExpert(), "Id",
                                            "AssistanceName");
    AssistanceJuror t = new AssistanceJuror();

    if (objAssistanceJurorRepository.FindBy(i => i.UserId == userid).Count() == 1)
    {
        t = objAssistanceJurorRepository.FindBy(i => i.UserId == userid).First();
    }
    return View(t);
}