ارسال اطلاعات از ویو به اکشن
سلام دوستان یه سوال داشتم ممنون می شم پاسخ بدین
من توی ویوی خودم می خوام یه اسکریپت بزار که وقتی کاربر روی یه کلید کلیک کرد به تعداد کلیک هاش یک مثلا تکس باکس جدید اضافه بشه . من توی اکشن خودم هم یک list<> جنریک دارم که از نوع یک کلاس می باشد و چند تا پارامتر دیگه که باید پر بشن سوال من اینه که چطور می تونم اطلاعات اون تکس باکس ها را دونه دونه و جدا از هم به لیست خودم اضافه کنم .
من از viewModel استفاده می کنم تا اطلاعات خودم رو به ویو ارسال کنم و می خوام که از روش :binede استفاده کنم برای دریافت اطلاعات خود توی اکشن . آیا این کار شدنی ؟ اگه بله چطور ممکنه؟
اگه هم شدنی نیست لطفا روش صحیح پر کردن یک لیست از نوع جنریک رو توی اکشن به من توضیح بدید خیلی ممنون از کمکتون.
نقل قول: ارسال اطلاعات از ویو به اکشن
اره شدنیه
کدی که به صورت داینامیک هست باید با جی کوئری بنویسی
برای اینکه داده ها بایند بشه در اکشن باید هم نام با متغیر باشد البته با یک تفاوت که یک ایندکس هم داره
برای نمایش داده ها در حالت ویرایش از این کد استفاده کن
for (var i = 0; i < Model.tempBasePersonelActivity.Count(); i++) {
<div id="divActivity@(i)" class="row">
<div class="col-lg-3">
@Html.HiddenFor(m => Model.tempBasePersonelActivity[i].Id, new { @class = "ActivityField1" })
</div>
<div class="col-lg-3">
@Html.DropDownListFor(m => Model.tempBasePersonelActivity[i].ActivityId, new SelectList(ViewBag.Activity, "Value", "Text", Model.tempBasePersonelActivity[i].ActivityId), new { @class = "ActivityField2 form-control" })
</div>
<div class="col-lg-3">
@Html.TextBoxFor(m => Model.tempBasePersonelActivity[i].Caption, new { @class = "ActivityField3 form-control" })
</div>
<div class=" controls">
<input value="حذف" name='btnDelete@(i)' id='btnDelete@(i)' onclick="removeRowActivity(@(i))" class="btn btn-default" type="button">
</div>
</div>
}
کد برای اضافه کردن تکس باکس به صورت داینامیک
$("#" + divName).append('<div class="col-lg-3 controls"><input type="hidden" value="' + activityId + '" name="tempBasePersonelActivity[' + (iActivity) + '].ActivityId" class = "ActivityField1"></div>');
2 ضمیمه
نقل قول: ارسال اطلاعات از ویو به اکشن
نقل قول: ارسال اطلاعات از ویو به اکشن
از گراف دیف برای ذخیره تغییر ات در بانک اطلاعاتی استفاده کن
نقل قول: ارسال اطلاعات از ویو به اکشن
نقل قول:
نوشته شده توسط
parsdarab
اره شدنیه
کدی که به صورت داینامیک هست باید با جی کوئری بنویسی
برای اینکه داده ها بایند بشه در اکشن باید هم نام با متغیر باشد البته با یک تفاوت که یک ایندکس هم داره
برای نمایش داده ها در حالت ویرایش از این کد استفاده کن
for (var i = 0; i < Model.tempBasePersonelActivity.Count(); i++) {
<div id="divActivity@(i)" class="row">
<div class="col-lg-3">
@Html.HiddenFor(m => Model.tempBasePersonelActivity[i].Id, new { @class = "ActivityField1" })
</div>
<div class="col-lg-3">
@Html.DropDownListFor(m => Model.tempBasePersonelActivity[i].ActivityId, new SelectList(ViewBag.Activity, "Value", "Text", Model.tempBasePersonelActivity[i].ActivityId), new { @class = "ActivityField2 form-control" })
</div>
<div class="col-lg-3">
@Html.TextBoxFor(m => Model.tempBasePersonelActivity[i].Caption, new { @class = "ActivityField3 form-control" })
</div>
<div class=" controls">
<input value="حذف" name='btnDelete@(i)' id='btnDelete@(i)' onclick="removeRowActivity(@(i))" class="btn btn-default" type="button">
</div>
</div>
}
کد برای اضافه کردن تکس باکس به صورت داینامیک
$("#" + divName).append('<div class="col-lg-3 controls"><input type="hidden" value="' + activityId + '" name="tempBasePersonelActivity[' + (iActivity) + '].ActivityId" class = "ActivityField1"></div>');
سلام و ممنون از راهنمایی شما من متوجه نشدم آیا منظورتون این بود که اکشن خودمون باید هم نام با او لیستی باشه که می خوایم به صورت داینامیک مقدار دهی کنیم باید باشه؟
و این گراف دیف هم نمی دونم چیه میشه لطف کنید و بیشتر توضیح بدین .
:گریه::گریه::گریه::گریه:من نفهمیدم چی گفتین:گریه::گریه::گریه::گریه:
نقل قول: ارسال اطلاعات از ویو به اکشن
نقل قول:
نوشته شده توسط
parsdarab
از گراف دیف برای ذخیره تغییر ات در بانک اطلاعاتی استفاده کن
بنده دارم از sql server و entityframework استفاده می کنم می شه بفرمایید گراف دیف چیست؟:کف:
نقل قول: ارسال اطلاعات از ویو به اکشن
نقل قول: ارسال اطلاعات از ویو به اکشن
فرض کنید همچین کلاسی هست
public sealed class BasePersonel
{
[NotMapped]
[Display(Name = "نوع فعالیت")]
public int? ActivityId { get; set; }
[NotMapped]
public string ActivityCaption { get; set; }
[NotMapped]
public List<BasePersonelActivity> tempBasePersonelActivity { get; set; }
public ICollection<BasePersonelActivity> BasePersonelActivitys { set; get; }
}
که فیلد ActivityId و ActivityCaption برای داده هایی که کاربر وارد میکنه بعد روی دکمه اضافه کلیک می کنه که باید به صورت دینامیک فیلد هایی بسازه که بعدا این فیلد ها به صورت اتوماتیک به لیستی که در اکشن هست انتساب داده میشه برای انتصاب اتوماتیک باید idو name اون فیلد هایی که به صورت داینامیک ساخته میشه درست بنویسی
برای این مثل به این صورت میشه
$("#" + divName).append('<div class="col-lg-3 controls"><input type="hidden" value="' + activityId + '" name="tempBasePersonelActivity[' + (iActivity) + '].ActivityId" class = "ActivityField1"></div>'); $("#" + divName).append('<div class="col-lg-3 controls"><input type="text" value="' + activityStr + '" name="tempBasePersonelActivity[' + (iActivity) + '].ActivityStr" class = "ActivityField2 form-control"></div>');
$("#" + divName).append('<div class="col-lg-3 controls"><input type="text" value="' + captionActivity + '" name="tempBasePersonelActivity[' + (iActivity) + '].Caption" class = "ActivityField3 form-control"></div>');
این باعث میشه اون فیلدهایی که به صورت داینامیک ساخته میشه به لیست tempBasePersonelActivity منتصب بشه
نقل قول: ارسال اطلاعات از ویو به اکشن
نقل قول:
نوشته شده توسط
parsdarab
فرض کنید همچین کلاسی هست
public sealed class BasePersonel
{
[NotMapped]
[Display(Name = "نوع فعالیت")]
public int? ActivityId { get; set; }
[NotMapped]
public string ActivityCaption { get; set; }
[NotMapped]
public List<BasePersonelActivity> tempBasePersonelActivity { get; set; }
public ICollection<BasePersonelActivity> BasePersonelActivitys { set; get; }
}
که فیلد ActivityId و ActivityCaption برای داده هایی که کاربر وارد میکنه بعد روی دکمه اضافه کلیک می کنه که باید به صورت دینامیک فیلد هایی بسازه که بعدا این فیلد ها به صورت اتوماتیک به لیستی که در اکشن هست انتساب داده میشه برای انتصاب اتوماتیک باید idو name اون فیلد هایی که به صورت داینامیک ساخته میشه درست بنویسی
برای این مثل به این صورت میشه
$("#" + divName).append('<div class="col-lg-3 controls"><input type="hidden" value="' + activityId + '" name="tempBasePersonelActivity[' + (iActivity) + '].ActivityId" class = "ActivityField1"></div>'); $("#" + divName).append('<div class="col-lg-3 controls"><input type="text" value="' + activityStr + '" name="tempBasePersonelActivity[' + (iActivity) + '].ActivityStr" class = "ActivityField2 form-control"></div>');
$("#" + divName).append('<div class="col-lg-3 controls"><input type="text" value="' + captionActivity + '" name="tempBasePersonelActivity[' + (iActivity) + '].Caption" class = "ActivityField3 form-control"></div>');
این باعث میشه اون فیلدهایی که به صورت داینامیک ساخته میشه به لیست tempBasePersonelActivity منتصب بشه
دوست عزیز میشه محبت کنی و این پروژه ای که اینو توش نوشتی رو هم بزاری اینجا . شرمنده ولی من یه مقدار تازه کار می باشم و سخت متوجه می شم
نقل قول: ارسال اطلاعات از ویو به اکشن
نقل قول: ارسال اطلاعات از ویو به اکشن
سلام
ممکنه کاربر بعضی از فیلدها رو حذف و بعضی فیلدهای جدید در بین فیلدهای قبلی اضافه کنه.
اگر ترتیب فیلدها برای ما مهم باشه، چطوری این ترتیب رو دریافت و ذخیره کنیم؟
نقل قول: ارسال اطلاعات از ویو به اکشن
سلام
میباست id و name رو آپدیت کنید
نقل قول: ارسال اطلاعات از ویو به اکشن
نقل قول:
نوشته شده توسط
parsdarab
سلام
میباست id و name رو آپدیت کنید
مشکل من نحوه یافتن id و name هسته در زمانیکه کاربر هر کدوم رو ممکنه حذف کنه.
اگر با یک مثال راهنمایی بفرمائید ممنون میشم
نقل قول: ارسال اطلاعات از ویو به اکشن
سمت سرور یا کلاینت؟
سیستمی که من کار کردم به این صورته که ابتدا کاربر در سمت کلاینت میاد اون مجموعه ای رو که میخاد رو میسازه.
حالا ممکنه در این بین بخواد یکی از اون ردیف ها رو از ابتدا وسط یا انتها حذف کنه.
اگر از ابتدا حذف کنه باید فیلدهای بعدی رو اپدیت کنه id و name . چرا آپدیت کنه؟ چون اگر اپدیت نشه در سمت سرور اون مجموعه در لیست بایند نمیشه.
همین طور اگر بخواهد از وسط این مجموعه حذف کنه.
در اینجا ممنطورم از اپدیت یعنی بایذ با کد جی کوئری id و name رو بگیره و به صورت [I]tempBasePersonelActivity.Caption عمل کنید.
که در اینجا متغیر i یک کانتر می باشه.
وقتی که شما به این صورت مقدار دهی idو name رو انجام میدید موقع ارسال اطلاعات به سرور
این مقداری که داخل این تکس باکس ها هستند سریالیز میکنه و میفرسته سمت سرور و در سمت سرور دیسریالیز میشه و به اون لیست انتسای داده میشه.
البته عملیات سریالیز و دیسریالیز به صورت اتوماتیک انجام میشه.
فقط تا جایی که اون کانتر مقدارش پشت سر هم باشه
نقل قول: ارسال اطلاعات از ویو به اکشن
سلام
اگر ممکنه تابع حذف جیکوئری رو هم بزارید.
ممنون
نقل قول: ارسال اطلاعات از ویو به اکشن
//add div and filed
function addRowActivity(activityId, activityStr, captionActivity) {
//debugger
iActivity++;
var divName = 'divActivity' + iActivity;
$("#partActivity").append('<div id=' + divName + ' class="row"></div>');
//debugger
//http://stackoverflow.com/questions/18065668/jquery-and-html-textboxfor
$("#" + divName).append('<div class="col-lg-3 controls"><input type="hidden" value="' + activityId + '" name="tempBasePersonelActivity[' + (iActivity) + '].ActivityId" class = "ActivityField1"></div>');
$("#" + divName).append('<div class="col-lg-3 controls"><input type="text" value="' + activityStr + '" name="tempBasePersonelActivity[' + (iActivity) + '].ActivityStr" class = "ActivityField2 form-control"></div>');
$("#" + divName).append('<div class="col-lg-3 controls"><input type="text" value="' + captionActivity + '" name="tempBasePersonelActivity[' + (iActivity) + '].Caption" class = "ActivityField3 form-control"></div>');
//http://stackoverflow.com/questions/7707074/creating-dynamic-button-with-click-event-in-javascript
var element = document.createElement("input");
//Assign different attributes to the element.
element.type = 'button';
element.value = 'حذف'; // Really? You want the default value to be the type string?
element.name = ''; // And the name too?
element.className = 'btn btn-default';
element.onclick = //removeRowActivity
function removeRowActivity() { // Note this is a function
//debugger
$("#" + divName).remove();
iActivity--;
updateActivity();
};
$("#" + divName).append(element);
}
function updateActivity() {
//debugger
//http://stackoverflow.com/questions/29864980/how-to-bind-list-of-objects-in-asp-net-mvc-when-one-item-in-between-is-deleted
$(".ActivityField1").each(function (iTemp) {
$(this).prop('name', "tempBasePersonelActivity[" + iTemp + "].Id");
});
$(".ActivityField2").each(function (iTemp) {
$(this).prop('name', "tempBasePersonelActivity[" + iTemp + "].ActivityId");
});
$(".ActivityField3").each(function (iTemp) {
$(this).prop('name', "tempBasePersonelActivity[" + iTemp + "].Caption");
});
}
نقل قول: ارسال اطلاعات از ویو به اکشن
ممنون بابت پاسخگویی
گویا GraphDiff برای EF Core ارائه نشده. نویسنده ش برای جایگذینش Detached رو که خودش تهیه کرده معرفی کرده.
اما برای MVC مثالی نزاشته و مشخص نیست چطور باید باهاش کار کرد.
شما جایگزین یا مثال از همین Detached سراغ ندارین؟
ممنون
نقل قول: ارسال اطلاعات از ویو به اکشن
من هنوز به سمت ef core نرفتم
:متفکر: