View To Controllerアクションからintデータを送信するだけです。コントローラのアクションがそのintデータを受け取っていない/そのintデータをマップできません。ビューからコントローラへデータを送信できません。.NET MVC
私のコントローラ=>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ConfirmNewBatchRequest(int? id)
{
if ((id?? 0) == 0)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Studentassignbatche ConfirmStudentassignbatche = db.Studentassignbatches.Find(id);
Batche FindBatche = db.Batches.Find(ConfirmStudentassignbatche.batch_code);
if (ConfirmStudentassignbatche == null)
{
return HttpNotFound();
}
ConfirmStudentassignbatche.StatusCode = 1;
db.Financeofstudents.Add(new Financeofstudent()
{
UserId = ConfirmStudentassignbatche.UserId,
batch_code = ConfirmStudentassignbatche.batch_code,
debit = FindBatche.amount,
credit = 0,
balance = FindBatche.amount,
lastTrunsaction = DateTime.Now,
entry_date = DateTime.Now
});
TryUpdateModel(ConfirmStudentassignbatche, new string[] { "StatusCode" });
db.SaveChanges();
TempData["BatchConfirmSuccess"] = "Success";
return RedirectToAction("Index");
}
と私の見解=>
@using Something
@model IEnumerable<Studentassignbatche>
@{
ViewBag.Title = "Confirm New Batch Request From Student";
IEnumerable<Course> CoursesTable = TempData["Courses"] as IEnumerable<Course>;
IEnumerable<UserDetail> UserDetailTable = TempData["UserDetails"] as IEnumerable<UserDetail>;
}
@section PageDescription{
<section class="content-header">
<h1>
@ViewBag.Title
<small>Tsms-admin</small>
</h1>
</section>
}
<div class="table-responsive">
<table class="table table-striped table-inverse table-bordered">
<tr>
<th>#</th>
<th>
@Html.DisplayNameFor(model => model.UserId)
</th>
<th>
@Html.Label("Student Name")
</th>
<th>
@Html.DisplayNameFor(model => model.batch_code)
</th>
<th>
@Html.DisplayNameFor(model => model.name)
</th>
<th>
@Html.Label("Vendor Name")
</th>
<th>
@Html.DisplayNameFor(model => model.adding_date)
</th>
<th></th>
</tr>
@{
int counter = 1;
}
@foreach (var item in Model)
{
<tr>
<td>
@counter
</td>
<td>
@Html.DisplayFor(modelItem => item.UserId)
</td>
<td>
@{
var UserDetailsId = UserDetailTable.Where(x => x.UserId == item.UserId).Select(x => x.id).FirstOrDefault();
var name = UserDetailTable.Where(x => x.UserId == item.UserId).Select(x => x.fullname).FirstOrDefault();
}
@Html.ActionLink(name, "Details", "Students", new { id = UserDetailsId }, null)
</td>
<td>
@Html.ActionLink(item.batch_code, "Details", "Batche", new { id = item.batch_code }, null)
</td>
<td>
@Html.ActionLink(item.name, "Details", "Course", new { id = item.name }, null)
</td>
<td>
@{
var vendorname = CoursesTable.Where(x => x.name == item.name).Select(x => x.vendor_heading).FirstOrDefault();
}
<label style="font-weight:normal !important">@vendorname</label>
</td>
<td>
@Html.DisplayFor(modelItem => item.adding_date)
</td>
<td style="width:100px;">
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(modelitem => item.id)
<div class="form-actions no-color">
<input type="submit" value="Confirm" class="btn btn-success" />
</div>
}
</td>
</tr>
counter++;
}
</table>
</div>
ループ内でレンダリングされたフォームは、次のようになります。
<form action="/Admin/ConfirmNewBatchRequest" method="post">
<input name="__RequestVerificationToken" type="hidden" value="K4GmhPUCkcqqclPtxW7F1YpiT_6mQBBZu7Wi8JtfQDMWdmCPMQsbjBfmtr9t8pSBrOV6Yixhhtz0B-OfMtxj4Y8dOwrdRBXlz9v0sD7O8YE1" />
<input data-val="true" data-val-number="The field id must be a number." data-val-required="The id field is required." id="item_id" name="item.id" type="hidden" value="3" />
<div class="form-actions no-color">
<input type="submit" value="Confirm" class="btn btn-success" />
</div>
</form>
、ここでどのように私のモデルであり、ビューとバインドする=>
public class Studentassignbatche
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id { get; set; }
/// <summary>
/// ////////
/// </summary>
[Required(AllowEmptyStrings = false, ErrorMessage = "User Id Is Required!")]
[MaxLength(12, ErrorMessage = "The Max length Of User ID is 12 Cahracter!")]
[RegularExpression("[1-3]{2}-[0-9]{5}-[123]{1}|[1-3]{2}-[0-9]{7}-[123]{1}", ErrorMessage = "Invalid Id,It should [xx]-[xxxxx]-[x] or [xx]-[xxxxxxx]-[x]!")]
[Display(Name = "User ID")]
public string UserId { get; set; }
/// <summary>
/// /////////
/// </summary>
[Required(AllowEmptyStrings = false, ErrorMessage = "Course Name Is Required!")]
[MaxLength(700, ErrorMessage = "The Max Length For Course Name Is 700 Character!")]
[Display(Name = "Course Name")]
public string name { get; set; }
/// <summary>
/// /////////
/// </summary>
[Required(AllowEmptyStrings = false, ErrorMessage = "Batch Code Is Required!")]
[MaxLength(700, ErrorMessage = "The Max Length For Batch Code Is 700 Character!")]
[Display(Name = "Batch Code")]
public string batch_code { get; set; }
/// <summary>
/// ///////
/// </summary>
[Required(AllowEmptyStrings = false, ErrorMessage = "Status Is Required!")]
[RegularExpression("^(?:complete|Complete|in progress|In progress)$", ErrorMessage = "Invalid Status!")]
[Display(Name = "Current Status")]
public string status { get; set; }
/// <summary>
/// ////////
/// </summary>
[Display(Name = "Course Completion Date")]
[DataType(DataType.DateTime,ErrorMessage="Invalid Date!")]
public Nullable<DateTime> completion_date { get; set; }
[Display(Name="Date Of Addition")]
[DataType(DataType.DateTime,ErrorMessage="Invalid Date!")]
public DateTime adding_date { get; set; }
/// <summary>
/// /////////
/// </summary>
[RegularExpression("^[01]{1}$", ErrorMessage = "Invalid Status Code!")]
[Required(ErrorMessage="Status Code Is Required!")]
public int StatusCode { get; set; }
//relationship with anothere table------
[ForeignKey("UserId")]
public User User { get; set; }
/// <summary>
/// //////
/// </summary>
[ForeignKey("name")]
public Course Course { get; set; }
/// <summary>
/// ///////
/// </summary>
[ForeignKey("batch_code")]
public Batche Batche { get; set; }
}
public ActionResult ConfirmNewBatchRequest(Studentassignbatche Studentassignbatche)
{
if (Studentassignbatche == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
}
を使用しますがデビュー、それはまだ私にnullオブジェクトを示している試すデバッグします。
これは、ビュー側で複数の<form></form>
を生成することができるため、なぜこのようなことが起こっているのですか。しかし、私が理解できる限り、1つ以上のビューが生成されても、すべてのフォームは1つの隠れた入力フィールドを取得します。 とフォームが提出されるとき、その特定の隠しフィールドはそれに関連付けられます<form>
。または、私のURLがhttp://localhost:43847/Admin/ConfirmNewBatchRequest
のように見えるものは、URLに問題がありますか?次に、なぜこの問題が発生しているのか、そしてその問題を取り除く方法。
レンダリングされたHTMLの外観はどうですか?作成した隠しフィールドに正しいIDが含まれていますか? – ADyson
@ADyson HTML \t > ==> '<フォームアクション= "/管理/ ConfirmNewBatchRequest" メソッド= "ポスト" のように見える<入力名= "__ RequestVerificationToken" タイプ= "隠された" 値= "K4GmhPUCkcqqclPtxW7F1YpiT_6mQBBZu7Wi8JtfQDMWdmCPMQsbjBfmtr9t8pSBrOV6Yixhhtz0B-OfMtxj4Y8dOwrdRBXlz9v0sD7O8YE1"/>< input data-val = "true" data-val-number = "フィールドIDは数字でなければなりません。 data-val-required = "IDフィールドは必須です。" id = "item_id" name = "item。id "type =" hidden "value =" 3 "/> \t