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);
}